首页 > web前端 > js教程 > 正文

为什么我们要避免在React中的“对象”道具

霞舞
发布: 2025-01-25 20:48:11
原创
890人浏览过

为什么我们要避免在react中的“对象”道具

摘要

  • 在React中,将对象作为props传递会导致不必要的重新渲染(可以使用useMemo避免)。
  • 尽可能直接传递原始值作为props。
  • 将props过多的组件拆分成更小的组件,遵循单一职责原则。

React如何检测props变化

React使用“浅比较”来检测props和state的变化,具体使用Object.is()进行比较。 因此,即使两个对象看起来相同,但由于它们在内存中是不同的引用,Object.is()也会返回false,导致重新渲染:

<code class="javascript">Object.is(
  { hello: "world" },
  { hello: "world" },
); // false</code>
登录后复制

即使使用了React.memo,以下子组件仍然会重新渲染:

<code class="javascript">const Parent = () => {
  const user = { name: "lee", age: 30 };
  return <Child user={user} />;
};

const Child = React.memo(({ user }: { user: { name: string; age: number } }) => {
  console.log("Child 重新渲染");
  return <div>{user.name}</div>;
});</code>
登录后复制

虽然useMemo可以避免这种情况:

<code class="javascript">const Parent = () => {
  const user = React.useMemo(() => ({ name: "lee", age: 30 }), []);
  return <Child user={user} />;
};</code>
登录后复制

useMemouseCallback更适合用于耗时的计算。对于简单的对象,这不是最佳解决方案。

Flex3组件和框架的生命周期 中文WORD版
Flex3组件和框架的生命周期 中文WORD版

在整本书中我们所涉及许多的Flex框架源码,但为了简洁,我们不总是显示所指的代码。当你阅读这本书时,要求你打开Flex Builder,或能够访问Flex3框架的源码,跟随着我们所讨论源码是怎么工作及为什么这样做。 如果你跟着阅读源码,请注意,我们经常跳过功能或者具体的代码,以便我们可以对应当前的主题。这样能防止我们远离当前的主题,主要是讲解代码的微妙之处。这并不是说那些代码的作用不重要,而是那些代码处理特别的案例,防止潜在的错误或在生命周期的后面来处理,只是我们当前没有讨论它。有需要的朋友可以下载看看

Flex3组件和框架的生命周期 中文WORD版 0
查看详情 Flex3组件和框架的生命周期 中文WORD版

直接传递原始值作为props

如果可行,最好将原始值作为props传递:

<code class="javascript">const Parent = () => {
  const user = { name: "lee", age: 30 };
  return <Child name={user.name} age={user.age} />;
};</code>
登录后复制

对于少量属性,这很简单。但对于包含许多属性的大型对象,这会变得繁琐。

创建更多组件

为了遵循单一职责原则,可以将大型组件拆分成更小的组件,每个组件负责处理对象的一个或几个属性:

<code class="javascript">const Parent = () => {
  const user = { name: "Lee", age: 30 };
  return (
    <>
      <Child1 name={user.name} />
      <Child2 age={user.age} />
    </>
  );
};</code>
登录后复制

以上就是为什么我们要避免在React中的“对象”道具的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号