详解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 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
Ajax执行顺序流程及回调问题分析
Dec 10 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
JS中表单的使用小结
Jan 11 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
three.js实现围绕某物体旋转
Jan 25 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
Aug 27 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
phpinfo的知识点总结
2019/10/10 PHP
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
详解Python中的循环语句的用法
2015/04/09 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
python实现顺时针打印矩阵
2019/03/02 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
Python如何调用JS文件中的函数
2019/08/16 Python
python写一个随机点名软件的实例
2019/11/28 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
北大研究生linux应用求职信
2013/10/29 职场文书
社区矫正工作方案
2014/06/04 职场文书
法人代表任命书范本
2014/06/05 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
谢师宴家长致辞
2015/07/27 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server