状态更改后不会触发setState回调

时间:2017-05-29 13:17:20

标签: reactjs

我有一个功能,我需要在设置状态后执行。我使用setStates回调函数来调用它:

setState({
    myState:myState
},secondFunction())

secondFunction = () => {
    console.log(this.state.myState);
}

当我的回调函数有括号:()时,控制台将记录未定义或没有任何内容,但是当我从回调中删除括号时,它似乎正常工作:

setState({
    myState:myState
},secondFunction)

我是React的新手,所以如果有人可以向我解释为什么括号在调用函数的顺序上会有所不同,这会非常有用!

2 个答案:

答案 0 :(得分:3)

原因是,您希望在function完成任务后调用setState,意味着它需要一个函数,但是当您使用()时意味着您没有传递{{1}你正在调用function

其他写同样的方法是:

function
  

secondFunction和secondFunction()之间的区别:

setState({ myState:myState }, () => secondFunction()) setState({ myState:myState }, function(){ secondFunction() }) 返回一个函数体,但secondFunction将返回该函数的结果

检查此代码段:



secondFunction()




答案 1 :(得分:1)

setState期望函数作为回调。

如果添加括号(),则调用函数secondFunction并将其返回的任何内容作为第二个参数传递给setState。您的函数不会返回任何内容,因此undefinednothing

你想要做的是传递函数本身(以后可以调用它),这是在没有括号的情况下完成的。