详解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 相关文章推荐
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
javascript简单链式调用案例分析
May 10 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
Jul 24 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
Jul 15 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
PHP中HTML标签过滤技巧
2014/01/07 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
详解Python多线程
2016/11/14 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
python浪漫表白源码
2019/04/05 Python
python的help函数如何使用
2020/06/11 Python
python tkinter实现连连看游戏
2020/11/16 Python
Linux机考试题
2015/07/17 面试题
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
关于爱国的标语
2014/06/24 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
导游词之河北野三坡
2019/12/11 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技
Python+pyaudio实现音频控制示例详解
2022/07/23 Python