已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。
6天前关闭
Improve this question的
例如
function NavBar() {
const { products } = React.useContext(StoreContext);
return (
<nav style={{ display: 'flex', gap: '1rem' }}>
<a>Home</a>
<a>
Basket<span style={{ marginLeft: '0.5rem' }}>{products.length}</span>
</a>
</nav>
);
}
字符串
实施例B
function NavBar2() {
const { products } = React.useContext(StoreContext);
return (
<nav style={{ display: 'flex', gap: '1rem' }}>
<a>Home</a>
<a>
Basket
<ProductCount />
</a>
</nav>
);
}
function ProductCount() {
const { products } = React.useContext(StoreContext);
return <span style={{ marginLeft: '0.5rem' }}>{products.length}</span>;
}
型
假设NavBar
是一个大组件,它可以处理UserProfile
的细节和很多东西。在这两个例子中,哪一个性能更好?创建一个像ProductCount
这样的小组件是富有成效的,还是为react创建和维护另一个组件带来不必要的开销?
我想如果我把useContext
放在我使用值的地方,我可以避免不必要的渲染组件,它不直接链接到值(这里是NavBar
)。例如,如果产品得到更新,在示例A中,整个NavBar
将被重新渲染,这可能是一个大组件,但在示例B中,只有ProductCount
被重新渲染
2条答案
按热度按时间xqk2d5yq1#
没有足够的信息来说明哪一种性能更好,但从用户的Angular 来看,这两种方式都不太可能产生明显的影响。
如何检索和存储要显示的数据可能是性能差距所在。在本例中,您需要从服务器检索多少产品、图像质量、定价是否动态等变量更有可能影响性能。
随着扩展而最大化性能的一些最佳做法包括:
1.保持组件的小型化和可重用性,并将其仅用于显示信息
1.使用钩子控制信息的获取,并将需要的信息作为props传递给组件
1.昂贵的计算、API调用等应该包含在钩子中,并用useMemo或useCallback Package 。
文档中的Thinking-in-React是一个很好的资源,可以更好地理解如何将UI分解为组件。
你可以通过构建你的应用程序以有效地重用组件来进一步提高性能。我在下面包含了一个如何构建购物车的示例。
创建两个新文件,第一个文件名为CartLineItem.jsx,如下所示。
字符串
第二个文件名为OrderSummary.jsx,在其中显示购物车的所有行项目以供查看。我们向该组件传递一个itemArray,它可以使用Reducer钩子进行更新,并与useContext钩子共享。
型
以上是非常高级的,只是一个例子,说明了如何构建React应用程序以提高性能。使用React有很多很多不同的方法来提高性能,但大多数都取决于您的具体用例。
希望上面的内容能给你一些新的见解,让你了解如何构建你的React应用程序,以最大限度地提高性能并减少开发时间。
祝你一路顺风!
2lpgd9682#
我告诉我的开发人员使用的经验法则是similar to the react documentation about keeping higher-order components as pure as possible,同时最大化容器的可读性。
对于你的例子,你正在提取ProductCount,如果这是一个执行非常特定功能的组件,那么它可以被提取。另一个原因可能是重用,如果你反复编写相同的代码行,那么你应该为此创建一个可重用的组件。
在创建可重用组件时,您还应该尝试使它们尽可能模糊和不依赖。
在性能方面,提取组件不太可能提高性能,因为性能完全取决于代码的设计方式。如果代码的编译和构建方式导致设计相同,则提取组件与不提取组件的效果是相同的。
做你提到的事情的主要目的是提高可读性,停止重复代码/创建可重用组件,以及更容易的错误处理和测试,但性能完全取决于代码本身及其设计方式,这可以在你提供的示例中很容易地看到,性能是相同的,但如果在提取的组件中存在问题,则诊断和解决小组件比大组件更容易。