javascript - 没有变化的纯渲染元素渲染 ReactJS

标签 javascript reactjs

这是代码示例:

http://codepen.io/anon/pen/mVpVXW

如果您打开控制台并在任何输入字段中键入内容,您会注意到 FormTextbox 组件的 render 方法是唯一发生变化的方法这被调用了,但是所有十个 FormElement 组件的 render 方法都被调用,即使只有其中一个有一个子组件发生了变化。

为什么要调用所有 FormElement 组件的 render 方法,而其中 9 个组件没有任何变化并且它正在使用 Pure Render Mixin(和子组件)还使用 Pure Render Mixin)?

最佳答案

我相信这会按预期工作,因为您正在组合组件。 PureRender 通过检查 Prop 是否相同来工作;但是,由于您使用 props.children 传递,prop 等价性检查将失败(JavaScript 中的对象/数组等价性是一件棘手的事情),因此组件将被重新渲染。它的子树更新,因为它具有未更改的原始 Prop 。


有关证明,请查看 this updated Pen我在其中明确覆盖了 shouldComponentUpdate。事实上,您会在日志中看到比较 this.props.children == nextProps.childrenfalse

来自PureRender Docs :

This only shallowly compares the objects. If these contain complex data structures, it may produce false-negatives for deeper differences.

(强调我的)

关于javascript - 没有变化的纯渲染元素渲染 ReactJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34904441/

相关文章:

javascript - 如何将数组对象转换为数组数组?

javascript - axios onUploadProgress 和 onDownloadProgress 不适用于 CORS

reactjs - 我们可以在 React Web 应用程序和 React Native 应用程序之间共享代码吗?并且已经准备好 React Native 生产了吗?

javascript - onWheel 事件 - 如何立即触发方法,而不是在用户停止滚动后触发

reactjs - 我可以为两条路线使用相同的路线处理程序吗

javascript - 什么是昆特?我克隆了一个模仿玻璃墙上真实雨滴的存储库。我尝试运行它,但出现错误 `Quint is not defined`

javascript - PhoneGap Ready 和 Javascript 代码

javascript - 日历热图 : how to define the range of % for each color instead of using quantiles

javascript - Unity3D:如何使用设备麦克风作为输入来移动对象?

javascript - 如何在 ant design 下拉菜单的事件 'triggering' 上应用 mixpanel