React既在constructor内部写state又在外部写了state的情况

2023-11-01

React既在constructor内部写state又在外部写了state的情况下,state到底是里面生效还是外面生效,

查了一下,没有说这俩同时的帖子,所以自己验证的时候第一个想法是考虑代码的顺序,还有constructor的特殊性
看了一下react的生命周期勾子,新旧都是constructor排在第一位,
在这里插入图片描述
在这里插入图片描述
下面验证阶段:

1.只有外部有state的时候,有一个就不说了,直接就赋值了,讨论有两个会不会覆盖

export default class Line extends Component {
    state={
        count:1,
        // num:33
    }

    state={
        count:2,
        num:44
    }

    onClick=()=>{
        console.log('点我后', this.state);
    }

    render() {
        console.log('render后', this.state);
        return (
            <div>
                <button onClick={this.onClick}>dianwo </button>
            </div>
        )
    }
}

结果显示的是第二次state={}的内容,说明能够多次执行
在这里插入图片描述
调换一下,在第一次state里放两个,第二次只放一个,看是否是全部覆盖,还是只修改同一个键的内容,如下
如果是全覆盖,那么输出的就不会有num,如果只是覆盖相同内容,那么应该是{count:2,num:33}

    state={
        count:1,
        num:33
    }

    state={
        count:2,
        // num:44
    }

结果如下,说明会全部覆盖,而不是像setState一样只修改相同的键,
在这里插入图片描述
2.同理验证这两种情况在constructor里的结果

export default class Line extends Component {
    constructor(props){
        console.log('constructor');
        super(props)
        // 初始化状态
        this.state={
            count:0
        }
        this.state={
            count:3,
            num:55
        }
    }
    
    onClick=()=>{
        console.log('点我后', this.state);
    }

    render() {
        console.log('render后', this.state);
        return (
            <div>
                <button onClick={this.onClick}>dianwo </button>
            </div>
        )
    }
}

可知为 可多次执行
在这里插入图片描述

    constructor(props){
        console.log('constructor');
        super(props)
        // 初始化状态
        this.state={
            count:0,
            num:66
        }
        this.state={
            count:3,
            // num:55
        }
    }

可知为 全覆盖
在这里插入图片描述
在单独的情况下,两者均是以最后一次state为准

下面是两者都存在的情况的验证:

3.考虑代码顺序

如果是按照代码顺序来的,那么最后是constructor里的第二个state生效

    state={
        count:1,
        num:33
    }
    constructor(props){
        console.log('constructor');
        super(props)
        // 初始化状态
        this.state={
            count:0,
            num:66
        }
        this.state={
            count:3,
            // num:55
        }
    }

结果是这样的,但是不能完全证明,有可能是constructor的特殊性,因为生命周期中,constructor是首先运行的
在这里插入图片描述
所以换个顺序测试,如果真是按顺序,那么应该是最后一个state,count为2,num为44

    constructor(props){
        console.log('constructor');
        super(props)
        // 初始化状态
        this.state={
            count:0,
            num:66
        }
        this.state={
            count:3,
            // num:55
        }
    }

    state={
        count:2,
        num:44
    }

结果只有count为3,是constructor里的第二个,说明不是按顺序来的,可见不管constructor在state={}的前后,只要在constructor里写了state,就不会再执行外部的state了,并且以constructor里最后一次this.state={ }为准
在这里插入图片描述
总结

  • 初始化state与setState不同,多次初始化state={}或者constructor里this.state={},都会全部覆盖,而不是像setState的覆盖相同部分键值对
  • 单独在同一个区域中所写的多次state(constructor内部,和外部两个区域),以最后一次为准,即代码顺序,而且是全覆盖
  • constructor中初始化state权重最高,并且会覆盖外部所写,即外部无法生效(不管代码顺序)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React既在constructor内部写state又在外部写了state的情况 的相关文章

随机推荐

  • Oracle将查询结果存入临时表的写法

    有时候因为查询结果很大且需要再跟其它表进行不同形式的连表查询 这是如果整个sql写下来不仅看起来臃肿而且查询效率也很低 Oracle提供了一种将查询结果存入到 临时表的写法可以讲查询结果存储到临时表中待用 我这里只记一种会话级别的用法 在当
  • MySQL-修改表(ALTER)

    常见的修改有 ALTER TABLE 表名 ADD 列名 索引 主键 外键等 ALTER TABLE 表名 DROP 列名 索引 主键 外键等 ALTER TABLE 表名 ALTER 仅用来改变某列的默认值 ALTER TABLE 表名
  • 常见排序算法04之堆排序

    常见排序算法04之堆排序 1 堆heap 何为堆 堆需要满足两个条件 1 元素插入按照完全二叉树插入 2 父节点值parent要大于左右子节点的值 大顶堆 所以例如有一数组 arr 4 10 3 5 1 先按照完全二叉树将元素插入树中 1能
  • 题目 1016: [编程入门]水仙花数判断

    题目描述 打印出所有 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该本身 例如 153是一个水仙花数 因为153 1 3 5 3 3 3 输入格式 无 输出格式 输出每一个水仙花数 一个数占一行 判断是否是水仙花数 inc
  • 支付项目介绍-清结算、风控、路由系统

    这里只是说了个大概 详细细节还需要涉及到具体项目时去深入了解逻辑和规则 一 清结算系统 1 清结算订单流水 流程说明 1 消费订单系统将支付成功的订单推送进清结算流水 记录相关订单信息 2 结算周期是D0 记录预计结算时间 调用账务实时结算
  • 将文件间的编译依存关系将至最低

    include date h include address h class Person private Date theBirthDate Address theAddress date h和address h这些头文件中有任何一个被改
  • 绕懵逼之同步/异步 阻塞/非阻塞

    被面试官绕蒙蔽了 特此整理总结一下 1概念解析 1 1 同步与异步概念描述 同步异步概念与消息的通知机制有关 所谓同步就是一个任务的完成需要依赖另外一个任务时 只有等待被依赖的任务完成后 依赖的任务才能算完成 这是一种可靠的任务序列 要么成
  • C语言fgets()函数:以字符串形式读取文件

    点击上方蓝字关注我 了解更多咨询 C语言 fgets 函数从文本文件中读取一个字符串 并将其保存到内存变量中 fgets 函数位于
  • 父进程等待子进程退出(linux系统编程)

    为什么要等待子进程退出 父进程等待子进程退出并收集子进程退出状态 子进程退出状态不被收集 会变成僵尸进程 举个例子 include
  • XXX packages are looking for funding run `npm fund` for details

    输入 npm install 报错完整内容 30 packages are looking for funding run npm fund for details found 60 vulnerabilities 22 low 14 mo
  • 爬虫与反爬、加密算法

    网络爬虫 网络爬虫 是一个自动提取网页的程序 它为搜索引擎从万维网上下载网页 是搜索引擎的重要组成 但是当网络爬虫被滥用后 互联网上就出现太多同质的东西 原创得不到保护 于是 很多网站开始反网络爬虫 想方设法保护自己的内容 他们根据ip访问
  • 编译内核的make命令

    https blog csdn net robothj article details 89840721 编译内核的make命令 问题描述 在编译友善之臂NanoPi NEO Air的Linux 4 14内核时 当我按照wiki说明 使用如
  • SSM商城项目实战:物流管理

    SSM商城项目实战 物流管理 在SSM商城项目中 物流管理是一个重要的功能模块 通过物流管理 可以实现订单的配送 运输和签收等操作 本文将介绍如何在SSM商城项目中实现物流管理功能的思路和步骤代码 实现SSM商城项目中物流管理的思路总结如下
  • ORACLE 11G R2 DGBROKER 之TAF

    ORACLE 11G R2 DGBROKER 之TAF 经过前面的实验我们已经搞定了服务器端的SWITCH OVER 和FAST FAILE OVER 那现在我们来搞定客户端或者是应用服务器端的自动切换到合适的数据库服务器上 当主数据库无法
  • 向量化执行引擎框架 Gluten 正式开源!

    近日举办的 Databricks Data AI Summit 2022 上 来自 Intel 的陈韦廷和来自 Kyligence 的张智超共同分享了 Intel 和 Kyligence 两家企业自 2021 年合作共建的全新开源项目 Gl
  • keil中出现了莫名其妙的error: #18: expected a “)“错误

    今天在使用keil进行编程时 突然出现了error 18 expected a 的错误 查看出现错误的地方时却发现并没有出现错误 最终发现 原因 使用sprintf时 表示的双引号未使用转义字符 解决方法 在要表示的双引号前添加转义字符
  • 安装Anaconda/Python3.9/Tensorflow

    安装Anaconda Python3 9 Tensorflow 安装Anaconda 官网安装 开梯子 Download即可 打开下载好的安装包 按照提示 一路 Next 选择安装路径 这里官方并没有推荐自动配置环境变量 自动或手动配置均可
  • 【python量化】将极限学习机(Extreme Learning Machine)用于股票价格预测

    写在前面 下面的这篇文章首先将介绍极限学习机 Extreme Learning Machine ELM 的基本原理 然后通过python实现ELM 并将其用于股票价格预测当中 原代码在文末进行获取 1 极限学习机的基本原理 极限学习机 Ex
  • scrapy爬取链接

    近期因为工作需要 开始学习和写爬虫 学习到了很多内容 就整理了一下发上来 需求 这里爬虫的目的是检测网站的漏洞 因此希望做成类似于burpSuit的历史记录一样的 初步需求是简单地爬取网站的链接 去重 尝试绕过反爬虫 更进一步的是希望像bu
  • React既在constructor内部写state又在外部写了state的情况

    React既在constructor内部写state又在外部写了state的情况下 state到底是里面生效还是外面生效 查了一下 没有说这俩同时的帖子 所以自己验证的时候第一个想法是考虑代码的顺序 还有constructor的特殊性 看了