2015-05-25 43 views
0

我知道有類似的問題,但他們都沒有幫助我修復我的。this.setState不是一個函數,反應原生

所以這是我的問題。

我正在與本機反應並使用flux調度器。我的應用程序調度員的派遣和註冊工作正常。我的問題是,當我想改變/設置調度寄存器函數內部的狀態時,我總是得到錯誤消息this.setState()不是一個函數。當然,我認爲這一定是一個有約束力的問題,然後(寫在es6中),所以我嘗試了各種各樣的綁定「這個」,但我仍然無法得到它的工作。有沒有人知道爲什麼?

這裏是代碼位不起作用:

testDispatcher() {  
    AppDispatcher.register((action) => { 
     if (action.action === TEST_ACTION) { 
      // I tried setting state inside here 
      this.setState({ 
       view: action.view 
      }).bind(this); // with or without this bind doesn't make a difference 

      // I also tried having a function outside of this function where I set the state.. this doesn't work either. 
      //this.updateView('home').bind(this); 
      console.log('dispatch register'); 
     } 
    }); 
} 

我也試圖控制檯登錄「本」我的註冊函數中和「這個」不回我的應用程序類。

回答

4

=>this綁定到testDispatcher()的範圍。這可能不是你想要的。在這種情況下,我認爲你應該放棄=>表示法,只是一個普通的匿名函數。

另外,this.setState(...args...).bind(this)是完全錯誤的。 1)this.部分表示.bind(this)是多餘的。 2)綁定的語法如下:foo.setState.bind(notFoo, ...args...)

+0

嗨,謝謝你的回覆。但是我不想將它綁定到我的testDispatcher函數中的AppDispatcher函數?如果我不這樣做,我最終會將調度程序的對象放在那裏,然後我也不能使用this.setState。這很奇怪,因爲當我使用箭頭函數並記錄「this」時,我得到了我的類,這是我想要的,但它仍然不會讓我使用this.setState。 – alexjson

+0

我解決了!我沒有從我的類中的React Component擴展,因此setState不是一個函數..哦,男孩..對不起,我應該發佈更多的代碼,然後這會更明顯。 – alexjson

1

我的類沒有從React Component擴展,因此this.setState不是函數。

+0

遇到同樣的問題。你的回答很有道理! – qasimalbaqali

+0

是否這樣?導出默認類MyWeatherApp擴展組件 – nathanengineer

相關問題