详解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 相关文章推荐
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
css结合js制作下拉菜单示例代码
Feb 27 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
jQuery 中DOM 操作详解
Jan 13 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
值得分享和收藏的Bootstrap学习教程
May 12 Javascript
jquery插件方式实现table查询功能的简单实例
Jun 06 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
Javascript实现动态时钟效果
Nov 17 Javascript
vue2 中二级路由高亮问题及配置方法
Jun 10 Javascript
vue安装遇到的5个报错及解决方法
Jun 12 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的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
关于this和self的使用说明
2010/08/01 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
详解参数传递四种形式
2015/07/21 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
js面向对象编程总结
2017/02/16 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
决策树的python实现方法
2014/11/18 Python
简介Django中内置的一些中间件
2015/07/24 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
python实现屏保计时器的示例代码
2018/08/08 Python
python递归下载文件夹下所有文件
2019/08/31 Python
阿拉伯书店:Jamalon
2019/07/24 全球购物
PHP如何自定义函数
2016/09/16 面试题
体育专业学生自我评价范文
2014/01/17 职场文书
领导调研接待方案
2014/02/27 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
小学领导班子对照材料
2014/08/23 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书