javascript - React 再次渲染相同的 div 元素 - 协调问题

标签 javascript reactjs

在 React 文档中,我读到了 reconciliation 。我突然想到了以下有趣的场景。

在我的示例中,代码使用 button元素来切换 boolean点击事件的值。基于此,代码使用三元运算符决定 React 应该渲染哪个元素。

让我们用两个组件来代表我的示例:

const First = () => {
    return <div>element - no difference</div>
}

const Second = () => {
    return <div>element - no difference</div>
}

最后渲染的元素没有区别。

第一个示例

FirstSecond第一个例子中的功能组件如下:

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> }
    </>
}

问题

我的理解按照documentation状态:

Whenever the root elements have different types, React will tear down the old tree and build the new tree from scratch.

无论哪种方式,最终渲染的结果都将是 <div>element - no difference</div>第二个示例显然没有再次渲染 DOM 元素。

为什么 React 渲染第一个示例?在这种情况下,这些被认为是不同的类型吗?

谢谢!

最佳答案

通过渲染,我假设您的意思是“渲染”(又名提交)到 DOM 的更改。这两个示例中仍会触发协调过程。

答案很简单。在第一个示例中,您返回一个 React 组件 ( <First /><Second /> ),而在第二个示例中,您返回一个 React 元素 (两个 div 之一)。

React 无法事先知道你的两个组件将做什么(它们可能有自己的逻辑),所以在后一种情况下,React 只会看到你想用 First 替换 Second 并重新渲染。在前一种情况下,您仅返回可以客观比较的元素

关于javascript - React 再次渲染相同的 div 元素 - 协调问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859121/

相关文章:

javascript - 然后服务 worker 注册 - 未定义不是一个函数

javascript - 使用JS生成CSS样式表

javascript - Electron - ipcRenderer.send() 上的原型(prototype)数据丢失

javascript - Formik - 在错误消息中使用大写首字母字段名称

javascript - 单击包含 span 的 div,不会触发 onclick 事件 - React

reactjs - 动态更改 Redux-toolkit Global Store 中的 Material UI 主题

javascript - 如何将值从cshtml文件传递给JS

javascript - 将 attr 传递给 sails js 中的所有良好响应

javascript - ReactJS/JestJS/ enzyme : How to test graphql() function used in compose()?

reactjs - React Hooks : Why is . useRef Hook 当前为 null?