Javascript React.js:您使用一个非';不可呼叫

Javascript React.js:您使用一个非';不可呼叫,javascript,reactjs,Javascript,Reactjs,这是我的一段代码,它工作正常(添加记录),但添加后会抛出一个错误: 未捕获错误:不变冲突:排队回调(…):您调用了 setProps,replaceProps,setState,replaceState,或 forceUpdate带有不可调用的回调 目前没有路线。有人能帮我解决这个问题吗?的第二个(可选)参数是回调函数,而不是字符串。您可以传递一个函数,该函数将在操作完成后执行。您实际上调用了getInitialState,而不是在返回this.setState(this.getInitialS

这是我的一段代码,它工作正常(添加记录),但添加后会抛出一个错误:

未捕获错误:不变冲突:排队回调(…):您调用了
setProps
replaceProps
setState
replaceState
,或
forceUpdate
带有不可调用的回调


目前没有路线。有人能帮我解决这个问题吗?

的第二个(可选)参数是回调函数,而不是字符串。您可以传递一个函数,该函数将在操作完成后执行。

您实际上调用了
getInitialState
,而不是在
返回this.setState(this.getInitialState(),'JSON')一行提供对函数本身的引用
和第二个参数只能是回调函数

this.setState
需要一个函数,该函数应将状态对象作为单个参数返回,或者需要一个对象将当前状态与之合并(还可以选择一个回调作为设置状态后运行的第二个参数)。因此,要么只提供一个返回新状态的函数,要么提供一个当前状态应与之合并的对象作为第一个参数,并提供一个回调,该回调将在状态设置为第二个参数后执行

this.setState(this.getInitialState)
this.setState(this.getInitialState())
this.setState(newState,callback)


查看API中的签名。

是否尝试过此操作<代码>返回this.setState(this.getInitialState,'JSON')删除第二个参数“JSON”真的很有帮助!非常感谢:)setState实际上也接受回调作为第一个参数:@HannesJohansson第一个参数可以是函数(不是回调,这是有区别的),也可以是对象。两个都可以。回调严格来说是在操作完成时要回调的函数。setState的第一个论点并非如此。@MadaraUchiha:是的,你是对的,我被指控使用术语不当。但setState仍然接受函数作为第一个参数。这与你在回答中所说的没有矛盾,只是一个旁注。第二个参数实际上应该是回调,而不是字符串。@HannesJohansson同样正确,但问题在于第二个参数,而不是第一个参数。将
this.getInitialState()
更改为
this.getInitialState
将无法解决此问题,因为a。这不是问题所在,b。签名是错误的。您的答案似乎表明updater函数返回整个新状态,而实际上它返回状态更改就像传递对象一样。更新程序函数签名是(prevState,props)=>stateChange
handleSubmit: function(e) {
    e.preventDefault();
    return $.post('', {page: this.state},
      function(data) {
        this.props.handleNewPage(data);
        return this.setState(this.getInitialState(), 'JSON');
      }.bind(this)
    );
  }