this.setState(function(prevState,props){ prevState 抓取之前this.setState的所有状态 props 所有属性 更新会被合并,浅合并 做一些处理 return data})this.setState({counter: this.state.counter + 1},()=>{ //回调 当前跟新完毕后执行,并不影响 他异步 队列的本质});
this.setState({counter: this.state.counter + 1},()=>{ console.log(this.state.counter) //1}); this.setState({counter: this.state.counter + 1},()=>{ console.log(this.state.counter) //1}); this.setState({counter: this.state.counter + 1},()=>{ console.log(this.state.counter) //1});this.setState((state,props)=>({counter:state.counter + 1}),()=>{ console.log(this.state.counter) //3})this.setState((state,props)=>({counter:state.counter + 1}),()=>{ console.log(this.state.counter) //3 })this.setState((state,props)=>({counter:state.counter + 1}),()=>{ console.log(this.state.counter) //3})this.setState((nextState,props)=>{ console.log(this.state.counter) //0 console.log(nextState.counter) //0 return {counter:nextState.counter + 1}},()=>{ console.log(this.state.counter) //3})this.setState((nextState,props)=>{ console.log(this.state.counter) //0 console.log(nextState.counter) //1 return {counter:nextState.counter + 1}},()=>{ console.log(this.state.counter) //3})this.setState((nextState,props)=>{ console.log(this.state.counter) //0 console.log(nextState.counter) //2 return {counter:nextState.counter + 1}},()=>{ console.log(this.state.counter) //3})
注意上面两种写法是不一样的: 一个是同一批次 异步执行; 更新合并了;
另一个是:等待上一次更新完毕再进行更新;虽然还是异步;但是类似 发布订阅; 更新完了才执行
第三个 理解了吗: 所有setstate 操作都不影响它 异步的本质;
第一个函数的参数总是最新的state, 本质还是异步;按顺序异步;按顺序合并 异步的本质导致它是批量合并的,所以直接合并成最后一个
留言与评论(共有 0 条评论) “” |