Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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_Memoization_React Usememo - Fatal编程技术网

Javascript 如何在React组件的呈现之间持久地记忆?

Javascript 如何在React组件的呈现之间持久地记忆?,javascript,reactjs,memoization,react-usememo,Javascript,Reactjs,Memoization,React Usememo,我在用钩子做反应。我有一个昂贵的功能,我想回忆一下 我知道React随附,但我需要记忆的值在第一次渲染时计算一次。因此,在第一次渲染中进行记忆没有意义,但在将来的渲染中进行记忆将是有益的 我已经读到了:存储在useMemo()中的值是否在调用useMemo的组件的重新呈现过程中保持不变? 如何在React组件的不同呈现之间持久地记忆?要做到这一点,您需要使用一种方法,例如通过提供程序和上下文将值存储在组件外部。请参阅React官方文档以执行此操作: 我个人的建议是使用React的Redux。这是

我在用钩子做反应。我有一个昂贵的功能,我想回忆一下

我知道React随附,但我需要记忆的值在第一次渲染时计算一次。因此,在第一次渲染中进行记忆没有意义,但在将来的渲染中进行记忆将是有益的

我已经读到了:存储在useMemo()中的值是否在调用useMemo的组件的重新呈现过程中保持不变?


如何在React组件的不同呈现之间持久地记忆?

要做到这一点,您需要使用一种方法,例如通过提供程序和上下文将值存储在组件外部。请参阅React官方文档以执行此操作:

我个人的建议是使用React的Redux。这是您的官方文件: 这非常适用于需要为应用程序存储全局状态或数据的专业解决方案

您需要知道UseMoom始终连接到组件生命周期

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
假设上面的代码行在
组件A
中。现在,假设
组件a
尚未卸载,那么,
memorizedValue
在重新呈现时持续存在,同时考虑到依赖项(
a
b
)在重新呈现时不会更改


react文档还表示,将来react有时可能会决定忘记记忆值,因此应将其用于优化,而不是语义保证。

很抱歉,您的用例有点不清楚,能否澄清?useMemo可跨Rerenders工作是否需要为每个组件实例计算不同的值,或者只计算一次?@gmoniva我需要计算一个值,速度很慢。components函数的后续运行(我使用的是钩子而不是类)需要访问计算结果。@CertainPerformance我认为钩子组件没有实例-它们只是运行的函数,对吗?例如,如果您有
,您最初需要运行两次计算,还是只运行一次?或者在给定的时间只有一个渲染?我想模糊的是-什么时候一个React钩子被认为是“未安装的”?不只是在需要时重新运行组件功能吗?我想在组件的不同运行中保存数据。@Mikemacana说您在一次渲染中渲染了
ComponentA
,下一次您渲染null而不是它时,这就是
ComponentA
被认为已卸载的一种情况。了解更多关于和解和反应生命周期的信息。谢谢@gmoniva!我已经看过了,但是示例只使用基于类的组件,所以我不确定它如何/是否适用于钩子。@Mikemacana它也适用于钩子我猜我不明白的是-渲染后,钩子组件的函数返回了。函数返回后,存储在
usemo
中的内容如何仍然存在?我了解闭包,React是否使用闭包来保留对
usemo
存储的值的引用?