Javascript 如果React.memo()不需要任何道具,我是否应该用它来包装我的所有组件?
显然,为什么Javascript 如果React.memo()不需要任何道具,我是否应该用它来包装我的所有组件?,javascript,reactjs,react-redux,react-hooks,Javascript,Reactjs,React Redux,React Hooks,显然,为什么React默认情况下不对其所有功能组件执行React.memo,我们应该在需要时自行包装功能组件 就我而言,我有一个大型react项目,其结构如下: const MyBigApp = () => { const shouldShowX = useSelector(getShouldShowX); const shouldShowY = useSelector(getShouldShowY); // Many more selectors return (
React
默认情况下不对其所有功能组件执行React.memo,我们应该在需要时自行包装功能组件
就我而言,我有一个大型react项目,其结构如下:
const MyBigApp = () => {
const shouldShowX = useSelector(getShouldShowX);
const shouldShowY = useSelector(getShouldShowY);
// Many more selectors
return (
<>
{shouldShowX && <ComplexComponentX />}
{shouldShowY && <ComplexComponentY />}
{/* many more components based on different selectors like above */}
</>
);
};
constmybigapp=()=>{
const shouldShowX=使用选择器(getShouldShowX);
const shouldShowY=使用选择器(getShouldShowY);
//更多的选择器
返回(
{shouldShowX&&}
{应该炫耀&&}
{/*基于上述不同选择器的更多组件*/}
);
};
我的所有业务逻辑都在redux中,组件在内部使用useSelector
从存储中获取数据
用React.memo
包装我的所有子组件是否有意义,因为根级别上任何选择器的更改都会导致我的整个应用程序重新呈现?
在前面的
connect
中,我们自动获得一个记忆组件,该组件比较自定义道具并存储作为道具传递给组件的值,那么,我们现在应该手动<强>永远>强> >代码>反应。备忘录< /代码>在使用一个不接收任何道具的组件中使用<代码> USES选择器< /代码>? < p>我认为,对于那些不接受任何道具的子组件,你应该考虑使用<代码>反应>备忘录< /代码>。我强烈推荐这篇文章:
2.1组件通常使用相同的道具进行渲染
在React.memo()中包装组件的最佳情况是当您希望
要经常渲染的组件,通常使用相同的道具
由于您询问的组件不接受任何道具,这意味着道具永远不会改变。因此,使用React.memo
可以避免渲染周期。请注意同一篇文章中的这一重要警告:
5。React.memo()是一个性能提示严格地说,React使用备忘录作为性能提示 在大多数情况下,React避免渲染已记忆的组件, 你不应该指望它来阻止渲染
React.memo()是记忆功能组件的好工具。正确应用后,当下一个道具等于上一个道具时,它可以防止组件无用的渲染。
因此,如果没有下一个道具和上一个道具,您不认为它有帮助吗?此外,考虑一般化的记忆化的情况,我们有一个复杂的函数,它不接受任何参数,那么在UMeMeO里面有帮助是很有帮助的,因为函数应该永远不会重新运行,并且USEMEMO不会再次运行。我认为,即使组件没有“下一个”和“上一个”道具,它也会很有帮助-尤其是当您的shouldShow
值频繁更改时。