相思资源网 Design By www.200059.com
react 是单向数据流,若想要改变已有组件的外观,我们只能通过更改组件的 props 或者更新组件的 state。在 react 项目的代码中我们操作最多的就是 this.setState 方法。下面对 setState 方法进行详细的说明。
<!--more -->
setState要点:react 框架为了提高性能,会对 state 的更新进行收集、合并、再进行一次批量的状态更新。这种机制常常导致一些意想不到的情况。
setState 有两种调用形式:
向 setState 传递对象
setState()并不会立即触发 state 的更新。
//this.state.demo = 1; handleClick = () => { this.setState({demo: 2}); console.log(this.state.demo);// 1 }
1、"htmlcode">
handleClick = () => { this.setState({demo: this.state.demo + 1}); this.setState({demo: this.state.demo + 1}); } //click 之后 demo 为2而不是3
综上:在同一代码块中不要多次调用 this.setState 方法
react 的 setState 还提供了另一种调用形式: this.setState(callbackFunc)
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 } }); }
refs
Async Nature Of setState
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无深入掌握 react的 setState的工作机制的评论...