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

why does the setstate callback function need to be an arrow function?

以这种情况为例

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

然后是这个:

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

第一个(带箭头)正确记录了新状态,第二个(没有箭头)似乎 console.log 它落后了一步。

为什么箭头函数在setState回调中导致正确?

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

console.log(number)

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

第二个(没有箭头)似乎 console.log 它落后了一步。

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

您在

致电 console.log(number)

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

并将 undefined 作为回调传递。由于 console.log() return 未定义。这样 this.setState 变成

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

this.setState() 可能有某种标志在未提供回调参数的情况下不执行回调函数(未定义与未提供参数相同),这解释了为什么它是不在 undefined().

处抛出错误