Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止在React中使用纯子级的纯组件重新招标?_Javascript_Reactjs_Performance_Memoization - Fatal编程技术网

Javascript 如何防止在React中使用纯子级的纯组件重新招标?

Javascript 如何防止在React中使用纯子级的纯组件重新招标?,javascript,reactjs,performance,memoization,Javascript,Reactjs,Performance,Memoization,我有一个功能性的React组件,我在其中使用React.memo来防止不必要的重新加载。如果它仅包含一个作为子项的字符串,则仅当该字符串发生更改时(如预期的那样)才会呈现该字符串。但是,当我添加另一个也使用React.memo的子组件时,它总是被重新提交(即使子组件没有重新提交)。以下是指示这些情况的示例代码: const Parent = React.memo(() => <div> Parent </div>) // Rendered only once! c

我有一个功能性的React组件,我在其中使用
React.memo
来防止不必要的重新加载。如果它仅包含一个作为子项的字符串,则仅当该字符串发生更改时(如预期的那样)才会呈现该字符串。但是,当我添加另一个也使用
React.memo
的子组件时,它总是被重新提交(即使子组件没有重新提交)。以下是指示这些情况的示例代码:

const Parent = React.memo(() => <div> Parent </div>) // Rendered only once!
const Parent=React.memo(()=>Parent)//只渲染一次!
第二种情况:

const Child = React.memo(() => <div> Child </div>); // Rendered only once!
const Parent = React.memo(() => <Child />); // Rerendered everytime
const Child=React.memo(()=>Child);//只渲染一次!
const Parent=React.memo(()=>);//每次重播

更清楚地说,在第二种情况下,父级总是被重新命名(好像未使用
React.memo
)。显然,没有必要重新命名它,因为它的子级不会重新命名,因此父级的子级不会更改。我有什么遗漏吗?如何更改实现以避免重新提交父组件?

您的第二个案例应该可以工作,至少对我来说是这样。记忆不是由函数内部控制的,而是由外部控制的。它使用道具。那么,可能是您的简化案例不包含导致意外行为的外部因素吗?您发布的代码没有演示您所描述的行为,这取决于
Parent
的呈现方式,请提供一个最小的可复制示例。您的第二个案例应该可以工作,至少对我来说是这样。记忆不是由函数内部控制的,而是由外部控制的。它使用道具。那么,您的简化案例是否不包含导致意外行为的外部因素?您发布的代码没有演示您描述的行为,这取决于
父级
的呈现方式,请提供一个最小的可重复性示例。