2015-05-25 44 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

相关问题