一文搞懂setState

api

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 条评论) “”
   
验证码:

相关文章

推荐文章