React Native 之 onAfterUpdateTransaction 方法

在React Native下想要使用原生的控件并不難,在這里中就是封裝的方法.

引語: 使用ReactProp注解,我們可以將JS的值傳到Native中.但如果有多個ReactProp注解,我們應(yīng)該讓哪個注解最終生效呢.

例如: 封裝一個Fresco的圖片控件,有ReactProp注解的setUrl(圖片地址)setFadeDuration(淡入毫秒)兩個方法

原生的顯示方法應(yīng)該是這樣的

        SimpleDraweeView iv=new SimpleDraweeView(this);
        GenericDraweeHierarchyBuilder builder = null;
        GenericDraweeHierarchy hierarchy=
                builder.setFadeDuration(fadeTime)
                        .build();
        iv.setImageURI(Uri.parse(url));

所以封裝的代碼應(yīng)該是這樣的

    @ReactProp(name = "url")
    public void setUrl(SimpleDraweeView simpleDraweeView,String url){
        this.url=url;
        simpleDraweeView.setImageURI(Uri.parse(url));
    }

    @ReactProp(name = "fadeDuration")
    public void setFadeDuration(SimpleDraweeView simpleDraweeView,int fadeDuration){
        this.fadeDuration=fadeDuration;
        simpleDraweeView.setImageURI(Uri.parse(url));
    }

但有問題的是,simpleDraweeView.setImageURI 到底該放在哪的問題.

還好找到ViewManager源碼,里面有個onAfterUpdateTransaction的方法,該方法就是在所有ReactProp等傳值結(jié)束之后再執(zhí)行.

正確寫法應(yīng)該是這樣子:

    @ReactProp(name = "url")
    public void setUrl(SimpleDraweeView simpleDraweeView,String url){
        this.url=url;
        simpleDraweeView.setImageURI(Uri.parse(url));
    }

    @ReactProp(name = "fadeDuration")
    public void setFadeDuration(SimpleDraweeView simpleDraweeView,int fadeDuration){
        this.fadeDuration=fadeDuration;
        simpleDraweeView.setImageURI(Uri.parse(url));
    }

    @Override
    protected void onAfterUpdateTransaction(SimpleDraweeView view) {
        super.onAfterUpdateTransaction(view);
        view.setImageURI(Uri.parse(url));
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容