React设计setState方法就是为了重新渲染页面

看看下面的代码实现的结果:

state = {value : 0
}function test() {this.setState({ value: this.state.value + 1 });this.setState({ value: this.state.value + 1 });this.setState({ value: this.state.value + 1 });
}test()   //发现最后value 是1,只加了一次function test1() {this.setState((state, props) => ({ value: state.value + 1 }));this.setState((state, props) => ({ value: state.value + 1 }));this.setState((state, props) => ({ value: state.value + 1 }));
}test1()  // 发现最后value 是3, 结果就如我们所意了

因为使用函数式setState,React会保证每次调用函数时,state都已经合并了之前的状态修改结果。


多次setState会合并

前面我们了解到setState并不会立即改变state的值,而是将其放到一个任务队列里,最终将多个setState合并,一次性更新页面。所以我们可以在代码里多次调用setState,每次只需要关注当前修改的字段即可。

多次setState会合并为什么会合并

主要是setState触发页面重新渲染, 需要经过以下生命周期:

  • shouldComponentUpdate
  • componentWillUpdate
  • render
  • componentDidUpdate

经过测试,其实state的值只有在render的时候才真正被修改了

// shouldComponentUpdate: 0// componentWillUpdate: 0// render: 1// componentDidUpdate: 1// shouldComponentUpdate: 1// componentWillUpdate: 1// render: 2// componentDidUpdate: 2// shouldComponentUpdate: 2// componentWillUpdate: 2// render: 3// componentDidUpdate: 3

react使用setState注意事项相关推荐

  1. 初学React,setState后获取到的thisstate没变,还是初始state?

    问题:(javascript)初学React,setState后获取到的thisstate没变,还是初始state? 描述: getInitialState(){return {data:[]};}, ...

  2. [react] react中setState的第二个参数作用是什么呢?

    [react] react中setState的第二个参数作用是什么呢? 第二个参数是一个callback函数,用于setState设置state的属性值成功之后的回调,此时调用this.state.p ...

  3. React之setState使用

    <!DOCTYPE html> <html> <head> <meat charset="UTF-8"> <title> ...

  4. react 解决 setState 异步问题

    react 解决 setState 异步问题 参考文章: (1)react 解决 setState 异步问题 (2)https://www.cnblogs.com/crazycode2/p/97158 ...

  5. React学习笔记六 React拓展 - SetState

    React拓展 - setState setState更新状态的两种写法 1.setState({}, [callback]) export default class Test extends Co ...

  6. React中setState方法详解

    一.为什么要使用 setState 方法,如何用? 在 React 中,组件分为 有状态组件 和 无状态组件,有状态组件就是能够定义 state 的组件,比如类组件,无状态组件反之,比如函数组件.st ...

  7. react+react-beautiful-dnd实例代办事项

    react+react-beautiful-dnd应用 效果预览 实现思路 index.js入口文件配置 import React from 'react' import ReactDOM from ...

  8. react 之 setState

    setState()是react为我提供的状态管理工具 比如现在有下面的这样一段代码: class MyComponent extends React.Component { constructor( ...

  9. React 项目----setState 方法修改 state (16)

    在class 类中,构造器里面有一个实例变量state ,这个也是class 组件和function组件之间的区别.class 组件有自己的私有的数据 export default class Bin ...

最新文章

  1. Pure-FTPd服务器
  2. Android Studio 在Ubuntu 下快捷键失效
  3. Node.js-sublime text3 配置node.js(ERROR: The process node.exe not found.)
  4. 5 日期范围查询_MySQL(四)——复杂查询
  5. Mac下使用Homebrew安装Sphinx和MySQL
  6. Mind Control CodeForces - 1291C(思维)
  7. 计算机网络结构示意图,计算机网络原理-计算机网络体系结构.pdf
  8. lnmp一键安装包删除添加的域名
  9. NoSQL 数据库的使用场景
  10. 条件概率、联合概率和贝叶斯公式
  11. Day10:捡烟蒂投资法:便宜组合
  12. python 股票行情系统_手把手教你用 Python 打造股票行情分析的 GUI
  13. python forward函数___call__、__init__和 forward三个函数在python中的调用方法
  14. QFP封装芯片手工焊接和拆卸技巧
  15. 如何使用Dart的Stream(一)
  16. 中国口罩市场现状调研及投资前景预测报告2022-2028年
  17. win10下git命令窗口快速命令
  18. 物理机(服务器)安装centos7系统,物理机上安装 centos7
  19. 钉钉在线表格下载后子表内容空白无数据
  20. 解决项目打成jar包上线无法读取配置文件(可通过挂载的方式解决)

热门文章

  1. activity(流程引擎)从零入门到实战学习
  2. 23个机器学习项目,助你成为人工智能大咖
  3. ON DUPLICATE KEY UPDATE 附带更新条件
  4. 谷歌机器学习规则:机器学习工程的43条最佳实践经验
  5. 1091 N-自守数
  6. 你真的会玩SQL吗?和平大使 内连接、外连接
  7. 【openSUSE】软件源和软件搜索
  8. PLSQL_性能优化系列07_Oracle Parse Bind Variables解析绑定变量
  9. C#锐利体验-第五讲 构造器与析构器(转)
  10. Navicat for MySQL - 破解