当前位置: 首页 > news >正文

react更改多层对象变量的方法 - ฅ˙

以下是我的测试组件中:

import React, { useEffect, useState } from 'react';export default function Home() {const [obj, setObj] = useState({ a: { t: 1 }, b: { t: 333 } }){ console.log(1111, '重新执行') }const ceshi = () => {setObj(pre => ({...pre,a: {...pre.a,t: pre.a.t + 1}}));/*setObj(pre => {const newObj = { ...pre }newObj.a.t = 55;return newObj;});*/// const objNew = JSON.parse(JSON.stringify(obj));// objNew.a.t = objNew.a.t + 1;// setObj(objNew);}useEffect(() => {console.log("🚀 ~ Home ~ obj:", obj)}, [obj])useEffect(() => {console.log("🚀 ~ Home ~ 具体字段a:", obj.a)}, [obj.a])useEffect(() => {console.log("🚀 ~ Home ~ 具体字段b:", obj.b)}, [obj.b])return <>{console.log(1111, '重新渲染')}<div onClick={ceshi}>ceshi-{obj.a.t}-{obj.b.t}</div></>;
}
  1. 使用JSON.parse(JSON.stringify(obj))深度克隆
    深度克隆每个key引用都变,以上三个useEffect监听都能监听到
    但是性能差,还可能数据丢失
setObj(pre => ({...pre,a: {...pre.a,t: pre.a.t + 1}}));

这种只更新了对象中的a,所以obj.b监听不到
3.

setObj(pre => {const newObj = { ...pre }newObj.a.t = 55;return newObj;});

这种只更新了obj.a.t, obj.a和obj.b都监听不到,但是页面会更新(以为obj变了组件会重新执行)
4. 使用 Immer

import { produce } from 'immer';setObj(produce(draft => {draft.a.t += 1;// b 自动保持原样,Immer 会正确处理
}));

总结,我一般使用2或者3比较多,具体更新整个key,哪个key,还是更新最里面的字段,需要根据业务场景来定;
比如说我子组件a监听属性a,b组件监听属性b,那我希望父组件更新的a属性的时候,b组件监听的b不要执行,那就需要父元素只改a的引用;

http://www.jsqmd.com/news/337954/

相关文章:

  • 新一代金融终端-FinceptTerminal(THS)
  • 焦作英语雅思培训机构推荐。2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 深圳赛诺杰与西安电子科技大学签约——共建大湾区智慧交通研究中心 - 品牌企业推荐师(官方)
  • 完全取代Claude Code?OpenAI反击来了,推出Codex app「限时免费使用」
  • Java面向对象——回顾方法的定义,调用
  • 2026年LED显示屏厂家实力推荐:湖南彩艺光电,LED室内外全彩/租赁/机械创意/柔性/户外全彩屏全系供应,适配舞台租赁/商显/创意多场景 - 品牌推荐官
  • 艾体宝干货 | 多模型数据库解决的到底是什么问题?
  • 濮阳英语雅思培训机构推荐。2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 焦作英语雅思培训机构推荐、2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 2026如何选择GEO服务商?3大核心指标+全流程避坑指南 - 品牌2025
  • 2026最新园林景观服务商/设计公司TOP5评测!三维服务体系+全周期解决方案权威榜单发布,赋能市政/道路/园区/厂区空间升级 - 品牌推荐2026
  • 2026国内外仿真软件对比分析:国产替代方案推荐 - 品牌2025
  • Linux驱动开发:内核模块与普通应用的区别
  • 鹤壁英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 量子主成分分析(QPCA):微算法科技(NASDAQ :MLGO)重构图像降维与特征提取的技术
  • node: nvm方式安装node
  • 焦作英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 2026年品牌营销策划公司推荐:基于多场景实效评测,解决中小企业增长与品牌痛点 - 品牌推荐
  • 核心期刊录用率翻倍?虎贲等考 AI:期刊论文从选题到见刊的 “学术加速器”
  • MySQL9.6.0 ZIP安装 windows11 家庭版
  • 2026最新景观设计服务商/公司TOP5评测!三维服务体系+全周期解决方案权威榜单发布,赋能市政/道路/园区/厂区/露台花园/学校场景升级 - 品牌推荐2026
  • AI 写论文哪个软件最好?实测后:虎贲等考 AI 凭 “学术闭环” 赢麻了!
  • 2026年文昌塔厂家权威推荐榜:电子熏香炉/金属文昌塔/铜质文昌塔/陶瓷文昌塔/七层文昌塔/十三层文昌塔/书斋香炉/选择指南 - 优质品牌商家
  • 2026年 浙江老年人照护服务推荐榜单:专业机构、暖心陪伴与生活照料,一站式养老托管解决方案 - 品牌企业推荐师(官方)
  • springboot tomcat 嵌入式 解决Slow HTTP DOS问题解决
  • 流批了,PDF神器,极其丝滑
  • 焦作英语雅思培训机构推荐;2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • 鹤壁英语雅思培训机构推荐。2026权威测评出国雅思辅导机构口碑榜 - 苏木2025
  • AI驱动的知识引擎如何落地?2026开年高能AI知识库部署方案商实战推荐 - 品牌2025
  • 2026年哪些音乐喷泉厂家同时具备水幕电影制作与景区灯光秀实施能力? - 深度智识库