官方文档bash
setState(updater[, callback]) updater就是一个函数,不包括()调用哦,就是一个reference。函数
updater以下:The first argument is an updater function with the signature:(state, props) => stateChangeui
const updater = (prevState, prevProps)=>{
return {counter: prevState.counter + prevProps.step};
}
复制代码
即:this
const updater = (prevState,prevProps) => ({counter: prevState.counter + prevProps.step})
//注意:这里是()不是{},ES6 shorthand格式,为了区分code block。
复制代码
即:spa
this.setState(
(prevState, prevProps)=>{
return {counter: prevState.counter + prevProps.step};
}
)
this.setState(
(prevState, prevProps)=>
( {counter: prevState.counter + prevProps.step};)
)
复制代码
以上写法,没法等价于直接去掉prevState参数,可是为什么React又能够这么写呢?由于这是React本身的定义而已。他在setState里面处理了,而不是天然过渡的。看下面官网截图。3d
this.setState(
{counter: prevState.counter + prevProps.step};
)
复制代码
区别是若是用updater 函数的话,更新render是当即更新的。facebook的人说,若是state是基于上一个prevState的话,为确保更新,反而推荐!code