關(guān)于ReactNative 中 this 踩過的坑

最近項目要求使用reactnative開發(fā),對于我這個新手來說已上手就遇到了許多奇奇怪怪的問題,今天我就來說說遇到的第一個坑遇關(guān)于調(diào)用函數(shù)時綁定this的迷惑,在使用reactnatve的過程中恍恍惚惚感覺到了一些些函數(shù)式編程的魅力,一個函數(shù)作為另外一個函數(shù)的參數(shù)來使用。在react中使用函數(shù)時,經(jīng)常需要 bind(this)有時候你搞忘記bind了,吼吼,將會出現(xiàn)一整屏的鮮紅伴著一些摸不著頭腦的錯誤,so,一切都顯得那么悲傷。好了,下面我來跟大家分享一下我綁定this使用的三種方法吧,推薦大家使用第三種。

先說明一下this到底是什么鬼::“this所指的就是直至包含this指針的上層對象”(如果還不是很理解的話那就google一下吧!)

方法一

constructor(props) 中將所有的定義的方法全部綁定一次 this,就像這樣:

constructor(props) {
        super(props);

        this.state = {
            user: undefined,
            data: undefined,
            dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 }),
            expanded: false,
            order: 1,
            page: 1,
            isFollowing: false,
        };
        this.sortBtnPressed = this.sortBtnPressed.bind(this);
        this.becomeCreatorBtnPressed = this.becomeCreatorBtnPressed.bind(this);
        this.nextPage = this.nextPage.bind(this);
        this.sortOptionPressed = this.sortOptionPressed.bind(this);
        this.followBtnPressed = this.followBtnPressed.bind(this);
    }

顯得格外麻煩和臃腫有木有??,當然你也可以寫一個方法為所有的函數(shù)去循環(huán)綁定this

方法二

在需要調(diào)用方法的時候綁定 this,比如:

  <TableView  data = {this.state.data}
                            dataSource = {this.state.dataSource}
                            requestData = {this.requestData}
                            didSelectMsg = {this.didSelectMsg.bind(this)}
  />

這種做法也不是很推薦,到處都在綁定 this 看起來不是很舒服

方法三

采用ES6 箭頭函數(shù)的寫法,既方便又整潔

requestData = () => {
        const nextIndex = this.state.pageIndex + 1;
        this.setState({
            pageIndex: nextIndex,
        });
        NativeModules.LivePlayerListModule.requestLivePlayerList(
            nextIndex,
            (data) => {
                this.updateDataSource(data);
            }
        );
    }

箭頭函數(shù)沒有它自己的this值,箭頭函數(shù)內(nèi)的this值繼承自外圍作用域。因此我們在調(diào)用函數(shù)的時候完全可以放心大膽的去調(diào)用,不用再操心這個this要從那里獲取,它指代的又是誰

有寫問題我還沒有弄得太明白,因此本文會不定期更新
如果在閱讀過程中遇到什么錯誤歡迎指正??

最后編輯于
?著作權(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)容