语法:setState(newState [,callback])

1、只要有入门基础的同学都知道 setState({...}) 是更新组件中的 state 内容

2、但是,setState 是异步的,倘若我们设置完就使用新的 state 就可能得不到我们想要的结果,例如:

this.state = {init:}
this.setState({init:})
console.log(this.state.init); // 输出结果为:1
//----------但是,我们明明是想要结果为 2------so~~~回调函数就解决了这个问题~~~-------
this.setState({init:}, ()=>{
console.log(this.state.init); // 输出结果为:2
})

⚠️从上面的代码段可以看出,setState 中的回调函数作用大致与 componnetDidUpdate生命周期函数相似

setState 方法将组件的更改排入队列,并且告诉 React 使用更改后的状态更新组件;而 React 会在必要的时候一起更新几个组件,而不是每次都立即进行更新。所以,我们需要将 setState 视为请求,而不是一个立即执行函数。在官方文档中,建议使用 componentDidUpdate 代替回调函数这种逻辑。

3、setState 内在隐患,由于 setState 是异步的,并且有可能是同一周期同一批次进行处理,就会出现以下问题:

 后一个更改替代了前一个更改,原本为们是想要 quantity + 2,由于异步批次处理,导致 quantity 最终只加 1

 Object.assign(
previousState,
{quantity: state.quantity + 1},
{quantity: state.quantity + 1},
...
)

 倘若下一个状态取决于先前的状态,,不建议写作形式如下:

//wrong
this.setState({
counter: this.state.counter + this.props.increment,
});

  而是:

//correct
this.setState((prevState, props) => ({
counter: prevState.counter + props.increment
}));

react 中的 setState的更多相关文章

  1. react中的setState的使用和深入理解

    前端框架从MVC过渡到MVVM.从DOM操作到数据驱动,一直在不断的进步着,提升着, angular中用的是watcher对象,vue是观察者模式,react就是state了,他们各有各的特点,没有好 ...

  2. React中的setState到底发生了什么?

    https://yq.aliyun.com/ziliao/301671 https://segmentfault.com/a/1190000014498196 https://blog.csdn.ne ...

  3. 3.React中的setstate的几个现象

    转载segfault 上面的一篇文章,https://segmentfault.com/a/1190000014498196 1.在同一个方法中多次setState是会被合并的,并且对相同属性的设置只 ...

  4. react中this.setState的理解

    this.setState作用? 在react中要修改this.state要使用this.setState,因为this.state只是一个对象,单纯的修改state并不会触发ui更新.所以我们需要用 ...

  5. React中this.setState是同步还是异步?为什么要设计成异步?

    在使用react的时候,this.setState为什么是异步呢? 一直以来没有深思这个问题.昨天就此问题搜索了一下. react创始人之一 Dan Abramovgaearon在GitHub上回答了 ...

  6. React中的setState(obj)

    1.setState(obj)  只能浅merge obj,对于复杂对象结构的不行 比如:  this.state = {   data:{  idx:1 }   }   this.setState( ...

  7. 从源码的角度再看 React JS 中的 setState

    在这一篇文章中,我们从源码的角度再次理解下 setState 的更新机制,供深入研究学习之用. 在上一篇手记「深入理解 React JS 中的 setState」中,我们简单地理解了 React 中 ...

  8. 深入理解 React JS 中的 setState

    此文主要探讨了 React JS 中的 setState 背后的机制,供深入学习 React 研究之用. 在课程 React.js入门基础与案例开发 中,有些同学会发现 React JS 中的 set ...

  9. React 中的this.setState

    在react中如何修改state中的数据     第一种写法:this.setState()         参数1:对象 需要修改的数据         参数2:回调 this.setState是一 ...

随机推荐

  1. jquery 应用

    http://www.jq22.com/ gwj6396668@163.com

  2. 一键分享到QQ空间、QQ好友、新浪微博、微信代码

    通过qq空间.qq聊天.新浪微博和微信二维码分享平台提供的接口,实现把网页中对应的图片.标题.描述的信息参数用javascript获取后传进接口中,实现一键分享. 使用到的接口(测试时需要登录,网址和 ...

  3. 服务器端编程心得(二)—— Reactor模式

    最近一直在看游双的<高性能linux服务器编程>一书,下载链接: http://download.csdn.net/detail/analogous_love/9673008 书上是这么介 ...

  4. [JOYOI] 1051 选课

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校 ...

  5. [Python3网络爬虫开发实战] 1.5.4-RedisDump的安装

    RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,所以要安装RedisDump,需要先安装Ruby. 1. 相关链接 GitHub:https://github.com ...

  6. navicat连接mysql8报错,错误提示为1251,原因及解决步骤

    一.错误原因: MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错. 二.解决步骤: 1.在linux虚拟机上登录mysql 2.更改加密方式: ALTER USER 'root'@ ...

  7. SAX解析XML-例子

    1.要解析的xml <?xml version="1.0" encoding="UTF-8"?> <employees> <emp ...

  8. STM32——NVIV:嵌套中断向量控制器

    STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits.这4个b ...

  9. 找到多个与名为“Home”的控制器匹配的类型。

    原因分析 其实上面已经讲的很清楚了,找到了两个同名Home控制器,需要配置命名空间来区分. 解决方法 方法一:修改RouteConfig.cs 方法二:修改RouteConfig.cs 和 Admin ...

  10. Android SwipeSelector

     Android SwipeSelector Android SwipeSelector是github上一个第三方开源的项目,其项目主页:https://github.com/roughike/S ...