详解React中setState回调函数


Posted in Javascript onJune 14, 2018

在使用React过程中,中可以使用this.state来访问需要的某些状态,但是需要更新或者修改state时,一般而言,我们都会使用setState()函数,从而达到更新state的目的,setState()函数执行会触发页面重新渲染UI。但是!!!setState是异步的!!!

1. 语法:

setState(updater[, callback]) //

updater是要改变的state对象,callback是state导致的页面重新渲染的回调,等价于componentDidUpdate
一般而言,在设置页面某些state的时候,需要先设置好state,然后再对页面的一些参数进行修改的时候,可以使用setState的回调函数。

2. 分析一下区别

不在回调中使用参数,我们在设置state后立即使用state:

this.state = {foo: 1};
this.setState({foo: 123});
console.log(this.state.foo);
// 1

在回调中调用设置好的state

this.state = {foo: 2};
this.setState({foo: 123}, ()=> {
 console.log(foo);
 // 123
});

关于setState的回调函数的作用大概如此,这个函数相当于componentDidUpdate函数,和生命周期的函数类似。

3. 注意:

  1. 刚说了,setState是异步的!不保证数据的同步。
  2. setState更新状态时可能会导致页面不必要的重新渲染,影响加载。
  3. setState管理大量组件状态也许会导致不必要的生命周期函数钩子调用。

参考文档:https://facebook.github.io/react/docs/react-component.html#setstate

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js的一些常用方法小结
Jun 29 Javascript
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
jquery.validate的使用说明介绍
Nov 12 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
易操作的jQuery表单提示插件
Dec 01 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
Jan 18 Javascript
node通过express搭建自己的服务器
Sep 30 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 #Javascript
Vue.js添加组件操作示例
Jun 13 #Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
Jun 13 #Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 #Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 #Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 #Javascript
详解webpack运行Babel教程
Jun 13 #Javascript
You might like
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php数组键名技巧小结
2015/02/17 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python处理session的方法整理
2019/08/29 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
学期研究性学习个人的自我评价
2014/01/09 职场文书
毕业大学生自荐信
2014/06/17 职场文书
学习十八大演讲稿
2014/09/15 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
施工安全保证书
2015/05/09 职场文书
董事长年会致辞
2015/07/29 职场文书
推普标语口号大全
2015/12/26 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python