源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

深入掌握 react的 setState的工作机制

  • 时间:2020-12-18 20:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:深入掌握 react的 setState的工作机制
react 是单向数据流,若想要改变已有组件的外观,我们只能通过更改组件的 props 或者更新组件的 state。在 react 项目的代码中我们操作最多的就是 this.setState 方法。下面对 setState 方法进行详细的说明。 <!--more --> setState要点:react 框架为了提高性能,会对 state 的更新进行收集、合并、再进行一次批量的状态更新。这种机制常常导致一些意想不到的情况。 [b]setState 有两种调用形式:[/b] [b]向 setState 传递对象[/b] setState()并不会立即触发 state 的更新。
//this.state.demo = 1;
handleClick = () => {
  this.setState({demo: 2});
  console.log(this.state.demo);// 1
}
1、🔔注意:在 addEventListener、setTimeout、ajax 回调中 this.setState 是立即触发的。 2、setState 会合并更新,可能会造成状态更新的丢失
handleClick = () => {
  this.setState({demo: this.state.demo + 1});
  this.setState({demo: this.state.demo + 1});
}
//click 之后 demo 为2而不是3
综上:在同一代码块中不要多次调用 this.setState 方法 [b]react 的 setState 还提供了另一种调用形式:[/b][code] this.setState(callbackFunc)[/code]
this.setState((previousState, currentProps) => {
  return { ...previousState, foo: currentProps.bar };
});
该语法和直接为 setState 传递对象不同,不会合并更新。
// demo + 1
handleSyncStateChange = () => {
  this.setState({
    demo: this.state.demo + 1
  });
  this.setState({
    demo: this.state.demo + 1
  });

}
// demo + 2
handleAsyncStateChange = () => {
  this.setState((preState, preProps) => {
    return {
      demo: preState.demo + 1
    }
  });
  this.setState((preState, preProps) => {
    return {
      demo: preState.demo + 1
    }
  });
}

[b]refs[/b] [url=https://vasanthk.gitbooks.io/react-bits/patterns/19.async-nature-of-setState.html]Async Nature Of setState[/url] 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部