[react] 为什么建议setState的第一个参数是callback而不是一个对象呢?

React 为了优化性能,有可能会将多个 setState() 调用合并为一次更新。
因为this.props和this.state 可能是异步更新的,你不能依赖他们的值计算下一个state(状态)。以下面的代码为例:

this.setState({
counter: this.state.counter + this.props.increment,
});
我们并不能通过上述代码得到想要的值,为了弥补这个问题,使用另一种 setState() 的形式,接受一个函数。这个函数将接收前一个状态作为第一个参数,应用更新时的 props 作为第二个参数,代码如下:

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

个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论

主目录

与歌谣一起通关前端面试题

[react] 为什么建议setState的第一个参数是callback而不是一个对象呢?相关推荐

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

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

  2. 从 0 到 1 实现 React 系列 —— 4.setState优化和ref的实现

    看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...

  3. React中使用setState

    不要直接修改 State state数据不能直接修改,必须要通过setState来修改.但是设置值的时候不能影响到之前state的值,举个栗子: // 处理数组,不会改变原有数组 this.setSt ...

  4. 【React深入】setState的执行机制

    一.几个开发中经常会遇到的问题 以下几个问题是我们在实际开发中经常会遇到的场景,下面用几个简单的示例代码来还原一下. 1.setState是同步还是异步的,为什么有的时候不能立即拿到更新结果而有的时候 ...

  5. [react] react中的setState执行机制是什么呢?

    [react] react中的setState执行机制是什么呢? 1.将setState传入的partialState参数存储在当前组件实例的state暂存队列中. 2.判断当前React是否处于批量 ...

  6. 《React极简教程》第一章 Hello,World!

    react React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook ...

  7. react中的setState

    setState的使用 1.1. 为什么使用setState 回到最早的案例,当点击一个 改变文本 的按钮时,修改界面显示的内容: 案例的基础代码如下: import React, { Compone ...

  8. 在python中定义类时实例方法的第一个参数名称_第7.5节 揭开Python类中self的面纱...

    在上节已经引入介绍了类定义,并简单介绍了类变量.实例变量.类方法和实例方法,后面章节还会进一步详细介绍相关的内容.本节要介绍的self是与类变量.实例变量.类方法和实例方法具体定义实现强相关的. 一. ...

  9. Error in exists(x): 第一个参数不对

    Error in exists(x): 第一个参数不对 目录 Error in exists(x): 第一个参数不对 问题: 解决: 完整错误: 问题: exists(x) x <- c(1,2 ...

最新文章

  1. RHEL 5服务篇—使用Apache搭建web服务(四)部署AWStats网站分析系统
  2. applicationContext.xml中设置读取jdbc.properties文件
  3. linux 命令行字符终端terminal下强制清空回收站
  4. 初步学习Prometheus的微服务监控功能
  5. 设计图书馆oracle触发器,Oracle触发器开发与设计
  6. 强化学习在游戏中的作用_游戏中的强化学习
  7. PHP面试题(二)---百度
  8. android直播弹幕开发,Android上专为视屏直播打造的轻量级弹幕库(100多kb)
  9. 怎么添加校园邮箱到Outlook?
  10. jQuery插件库常用前端库引用地址详细提供
  11. 2019/04/02 实现互联网的DNS架构
  12. [Windows]卸载Office 2016密钥
  13. 【无标题】对于_, predicted = torch.max(outputs.data, 1)的理解
  14. 如何看计算机几核,如何查看电脑CPU是几核的?,这几步你要了解
  15. 为什么我不建议你将python作为入门编程语言
  16. IDM(Internet Download Manager)—下载各类安装包(github代码、python包)、软件、视频、文档的神器,居家必备良药...
  17. JDBC操作数据库——resultset的操作小窍门
  18. 紫光同创国产FPGA学习之Design Editor
  19. IDEA debug 断点无效
  20. PC 版微信多开防撤回软件

热门文章

  1. 乐高ev3 读取外部数据_数据就是新乐高
  2. java 添加用户 数据库,跟屌丝学DB2 第二课 建立数据库以及添加用户
  3. java 技能鉴定_JAVA试题-技能鉴定
  4. matlab软件imag函数_「复变函数与积分变换」基本计算代码
  5. volatile关键字有什么用
  6. 我如何预测10场英超联赛的确切结果
  7. 1.移动端测试知识笔记(面试必备,测试点,adb命令)
  8. leetcode 113. 路径总和 II(Path Sum II)
  9. apm固定翼调试方法
  10. Linux内核初探3