为什么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()
.
处抛出错误
以这种情况为例
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()
.