【发布时间】:2020-03-10 13:12:05
【问题描述】:
在 React 文档中,我阅读了有关 reconciliation 的信息。我突然想到了以下有趣的场景。
在我的示例中,代码使用button 元素在点击事件上切换boolean 值。基于此,代码使用三元运算符决定 React 应该渲染哪个元素。
让我们有两个组件来表示我的示例:
const First = () => {
return <div>element - no difference</div>
}
const Second = () => {
return <div>element - no difference</div>
}
最后渲染的元素没有区别。
第一个例子
在第一个例子中有First和Second功能组件如下:
const YourComponent = () => {
const [renderFirst, setRenderFirst] = useState(true);
return <>
<button onClick={() => setRenderFirst(!renderFirst)}>Toggle</button>
{renderFirst ? <First /> : <Second /> }
</>
}
第二个例子
在第二个示例中,仅使用 div 元素但以相同的结果结束:
const Contact = () => {
const [renderFirst, setRenderFirst] = useState(true);
return <>
<button onClick={() => setRenderFirst(!renderFirst)}>Toggle</button>
{renderFirst ? <div>element - no difference</div> : <div>element - no difference</div> }
</>
}
问题
我对@987654322@ 状态的理解:
只要根元素有不同的类型,React 就会拆除旧树并从头开始构建新树。
无论哪种方式,最终呈现的结果都会以<div>element - no difference</div> 结尾。 第二个例子显然没有再次渲染 DOM 元素。
那么为什么 React 会渲染 第一个示例?在这种情况下,它们被认为是不同的类型吗?
谢谢!
【问题讨论】:
标签: javascript reactjs