`setState({key:value},()=> function())`与`setState({key:value},function())`相同?

时间:2018-04-09 21:54:06

标签: javascript reactjs

在以下两种方式中使用React的setState()方法有什么区别:

setState({key: value}, myFunction())

VS

setState({key: value}, () => myFunction())

1 个答案:

答案 0 :(得分:0)

(编辑后使用myFunction作为帖子)。

两行代码完全不同:

setState({key: value}, myFunction())
在调用myFunction之前,

在计算参数时调用setState。然后将myFunction的返回值作为第二个参数传递给setState。因此,只有myFunction()返回setState使用的回调函数时,此版本才有用。但是,如果myFunction是回调,那么它就是一个错误,它可以表现为在更新状态之前调用回调而不是之后的回调。

setState({key: value}, () => myFunction())

创建一个匿名回调函数,该函数在执行时返回调用myFunction的返回值。箭头回调函数作为第二个参数传递给setState,而不在此过程中调用myFunction。在myFunction更新状态并调用箭头函数后,将调用setState

第二种形式通常更好地编写而不创建匿名函数中介:

setState({key: value}, myFunction)

虽然可能与问题无关,但在调用this之前,可以使用箭头函数将myFunction this值设置为setState值:

setState({key: value}, ()=>this.myFunction); // use current this value in the callback.