如何在不破坏shouldComponentUpdate的情况下传递对象/子对象作为道具
How does one pass objects / children as props without breaking shouldComponentUpdate?
考虑两种不同的父组件渲染方法p:
示例1
render() {
return
<ChildComponent propA={ { staticKey: staticValue} }/>
}
示例2
render() {
return someStaticData.map( data =>
<ChildComponent>
<span>
{
data.value.map(dataInner =>
<span>
{ dataInner.value }
<span>
)}
</span>
</ChildComponent>
)
}
在ChildComponent中
子组件按照React Guide的建议处理shouldComponentUpdate
。
shouldComponentUpdate(nextProps, nextState) {
return shallowCompare(this, nextProps, nextState);
}
在上述两种示例情况下,子组件的shallowCompare
总是返回true,即使我传递的对象/子对象完全相同(因为引用发生了更改)。这导致了大量渲染的浪费。
如何在不破坏SCU的情况下将静态物体/儿童作为道具传递?
也许切换到不可变的数据结构会有所帮助,因为从那时起,SCU钩子只需要比较引用不等式:
http://facebook.github.io/immutable-js/
https://github.com/rtfeldman/seamless-immutable
相关文章:
- 在不知道深度或父属性的情况下从对象中删除属性
- 如何在不使用 new 关键字的情况下从函数创建对象
- 如何在不知道关键字的情况下访问javascript对象值
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 是否可以在不重新渲染的情况下显示/隐藏父对象中的元素
- 在禁用ng的情况下搜索JSON对象(AngularJS)
- 如何在不安装npm的情况下一次性扩展对象
- 是否可以在不创建svg对象的情况下创建捕捉元素?[snap.svg]
- 是否可以在不序列化的情况下将对象从SilverLight传递到JavaScript
- 在知道对象值的情况下,确定数组中JS对象的索引
- 在不重构Mongo数据库的情况下,更新嵌入数组中的具有给定ID的对象
- 如何避免在这种情况下修改事件对象
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 是否可以在不加对象名称前缀的情况下调用对象的函数
- 在不使用object.Create的情况下创建具有null原型的javascript对象
- 我可以在不使用XMLHttpRequest或文档对象的情况下使用Javascript来获取网页吗
- 如何在不选择模式配置参数的情况下,使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach
- 如何在不破坏shouldComponentUpdate的情况下传递对象/子对象作为道具
- 在不使用jQuery的情况下连接两个JSON对象