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

React state(及组件) 的保留与重置

当在树中相同的位置渲染相同的组件时,React 会一直保留着组件的 state

return (<div><Counter />{showB && <Counter />} </div>
)
// 当 showB 为 false, 第二个计数器停止渲染,它的 state 完全消失了。这是因为 React 在移除一个组件时,也会销毁它的 state。
// 当 showB 再次为 true 时,另一个计数器及其 state 将从头开始初始化(score = 0)并被添加到 DOM 中。
return (<div>{isFancy ? <Counter isFancy={true} /> : <Counter isFancy={false} />} </div>
)
// 当 isFancy 变化时,计数器 state 并没有被重置。
// 不管 isFancy 是 true 还是 false,组件返回的 div 的第一个子组件都是 <Counter />。
// 它是位于相同位置的相同组件,所以对 React 来说,它是同一个计数器。
如何在相同位置重置 state
  return (<div>{isPlayerA ? (<Counter person="Taylor" />) : (<Counter person="Sarah" />)}</div>);// Counterconst [score, setScore] = useState(0);return (<div><h1>{person} 的分数:{score}</h1><button onClick={() => setScore(score + 1)}>加一</button></div>);
}

在这里插入图片描述
切换玩家时,分数会被保留下来。这两个 Counter 出现在相同的位置,所以 React 会认为它们是 同一个 Counter,只是传了不同的 person prop。

有两个方法可以在它们相互切换时重置 state:

  1. 将组件渲染在不同的位置
  2. 使用 key 赋予每个组件一个明确的身份
// 1. 将组件渲染在不同的位置{ isPlayerA && <Counter person="Taylor" /> }{ !isPlayerA && <Counter person="Sarah" /> }
// 2. 使用 key{ isPlayerA ? (<Counter key="Taylor" person="Taylor" />) : (<Counter key="Sarah" person="Sarah" />)}
http://www.lryc.cn/news/372613.html

相关文章:

  • flask返回的数据怎么是转义后的字符串啊
  • C++17并行算法与HIPSTDPAR
  • 【什么是几度cms,主要功能有什么】
  • 组合和外观模式
  • 设置服务器禁止和ip通信
  • 中文技术文档的写作规范(搬运)
  • 「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(一)
  • Python使用策略模式生成TCP数据包
  • 无文件落地分离拆分-将shellcode从文本中提取-file
  • MySQL 日志(一)
  • XML 编辑器:功能、选择与使用技巧
  • 单例模式(设计模式)
  • 提升你的编程体验:自定义 PyCharm 背景图片
  • SpringCloud与Dubbo区别?
  • 简单Mesh多线程合并,使用什么库性能更高
  • 长亭培训加复习安全产品类别
  • memcached介绍和详解
  • Spring boot 注解实现幂等性
  • NVIDIA Jetson AI边缘计算盒子
  • React核心概念、主要特点及组件的生命周期
  • Java基础面试重点-1
  • 18. 四数之和 - 力扣
  • [vue2]深入理解路由
  • 搜维尔科技:SenseGlove为什么不同的手套尺寸对触觉技术至关重要
  • java算法:选择排序
  • helm升级部署时出现升级挂起状态处理
  • 16、架构-可观测性-事件日志详细解析
  • Java数据结构与算法(买卖股票的最佳时机二贪心算法)
  • t265 坑
  • 【LLM之RAG】Adaptive-RAG论文阅读笔记