为什么setstate回调函数需要是箭头函数?

时间:2018-08-23 08:40:06

标签: javascript reactjs setstate

采取这种情况

this.setState({ number: newNumber}, () => console.log(number))

然后是这个:

this.setState({ number: newNumber}, console.log(number))

第一个(带有箭头)正确记录了新的状态,第二个(没有箭头)似乎在记录控制台状态。将它落后一步。

为什么箭头功能会导致setState回调中的箭头功能正确?

2 个答案:

答案 0 :(得分:1)

因为,setState is a callback function中的第二个参数。但这不是回调:

console.log(number)

答案 1 :(得分:0)

与第一个答案一样,您需要一个回调函数。如果您不将console.log()包装在函数中,则它不是回调函数。

第二个(无箭头)似乎在控制台。将其落后一步。

console.log()不是立即执行回调,而是立即执行,记录number变量的当前值,并将其返回值作为回调参数传递。

您通过

致电console.log(number)

this.setState({ number: newNumber}, console.log(number))

并传递未定义的回调。由于console.log()返回未定义。这样this.setState变成

this.setState({number: newNumber}, undefined);

this.setState()可能有某种标志,在没有提供回调参数的情况下(未提供与未提供参数相同的参数)不执行回调函数,这解释了为什么不抛出undefined()处出现错误。