重庆智能网站建设,单页网站制作教程,江门关键词排名优化,wordpress建站微信联系当在树中相同的位置渲染相同的组件时#xff0c;React 会一直保留着组件的 state return (divCounter /{showB Counter /} /div
)
// 当 showB 为 false, 第二个计数器停止渲染#xff0c;它的 state 完全消失了。这是因为 React… 当在树中相同的位置渲染相同的组件时React 会一直保留着组件的 state return (divCounter /{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 personTaylor /) : (Counter personSarah /)}/div);// Counterconst [score, setScore] useState(0);return (divh1{person} 的分数{score}/h1button onClick{() setScore(score 1)}加一/button/div);
}切换玩家时分数会被保留下来。这两个 Counter 出现在相同的位置所以 React 会认为它们是 同一个 Counter只是传了不同的 person prop。
有两个方法可以在它们相互切换时重置 state
将组件渲染在不同的位置使用 key 赋予每个组件一个明确的身份
// 1. 将组件渲染在不同的位置{ isPlayerA Counter personTaylor / }{ !isPlayerA Counter personSarah / }
// 2. 使用 key{ isPlayerA ? (Counter keyTaylor personTaylor /) : (Counter keySarah personSarah /)}