javascript - 将对象作为功能组件道具传递的性能影响
问题描述
我一直很难明确回答这个问题,特别是关于功能组件:
将对象作为属性传递给功能组件与仅传递原始值是否有任何性能差异?比较地图标记的两种实现,例如:
版本 1:为位置传递一个对象:
// position is an object with latitude and longitude
const CustomMapMarker({position, text, children}) => (
<Fragment>
<Marker position={position}/>
<Label>{text}</Label>
{children}
</Fragment>
)
版本 2:传递文字并构造对象:
const CustomMapMarker({lat, long, text, children}) => (
<Fragment>
<Marker position={{latitude: lat, longitude: long}}/>
<Label>{text}</Label>
{children}
</Fragment>
)
我的理解是,在版本 1 中,React 对每个道具执行严格相等(===)检查,因此道具“位置”在重新渲染时总是会失败,因为对对象的引用会在重新渲染时发生变化使成为。这将导致 CustomMapMarker 重新渲染,因此标签、片段、标记和所有子项将始终重新渲染。
在版本 2 中,由于 lat 和 long 是作为原始值分别传递的,所以只要两个值都不改变,相等性检查就会通过,并且子组件不会重新渲染。
这个对吗?还是我误会了?
解决方案
推荐阅读
- c# - 更新表时 DbContext.SaveChanges() 如何在 C# 中工作?
- angular - TransferState 解析数据的某些部分不存在于客户端,尽管它存在于服务器上
- python - Python 正则表达式捕获组扩展
- php - 如何在laravel中的第1列等中获取1-10个数字
- django - 如何在 Django 视图中比较 2 个不同表的列?
- java - Keycloak java.lang.RuntimeException:必须在配置中设置“领域”?
- keras - 在 Keras 自定义损失函数中计算递归平均值
- python - 如何为python看门狗编写代码以监控多个位置/文件夹中的文件系统更改
- azure-functions - Azure 函数 C# 通行证列表
作为 Http Trigger (GET) 的参数 - python - Pandas:如何仅更改系列中的一列包含相同的列名