Reactjs 跨组件使用备注行为

Reactjs 跨组件使用备注行为,reactjs,react-hooks,Reactjs,React Hooks,在我的组件中,我使用它来运行一个有点昂贵的查询,并将其缓存到浏览器运行时。到目前为止,它大大缩短了后续渲染所需的时间 但是,实际的第一次渲染仍然是一个问题。我一次呈现了数千个组件实例,似乎昂贵的查询会被不必要地重复。相同的查询结果可以用于许多这样的实例,因为我一次只为查询使用两到三个唯一的输入。该查询可以被认为是纯粹的,因为它一致地为相同的输入返回相同的结果 我希望记忆的返回值对同一组件的其他实例可用,但分析数据表明它不可用 是否有一种干净且可持续的方法来确保在对同一函数的所有调用中共享已记录的

在我的组件中,我使用它来运行一个有点昂贵的查询,并将其缓存到浏览器运行时。到目前为止,它大大缩短了后续渲染所需的时间

但是,实际的第一次渲染仍然是一个问题。我一次呈现了数千个组件实例,似乎昂贵的查询会被不必要地重复。相同的查询结果可以用于许多这样的实例,因为我一次只为查询使用两到三个唯一的输入。该查询可以被认为是纯粹的,因为它一致地为相同的输入返回相同的结果

我希望记忆的返回值对同一组件的其他实例可用,但分析数据表明它不可用


是否有一种干净且可持续的方法来确保在对同一函数的所有调用中共享已记录的结果,而不管原始组件实例是什么?

React钩子维护的状态特定于调用它们的组件实例

为了使
usemo
useCallback
具有多个组件实例的公共状态,它们应该出现在最近的公共父级中,并在需要时为深度嵌套的子级提供上下文API

如果它的行为方式不同,则应使用通用的记忆实用程序,如:

它还允许控制缓存存储:

memoizedExpensiveFn.Cache = ES6MapWithExpiration;

也许你可以把这些繁重的计算移到父组件上,然后作为道具传递给你的千个子组件?@Tholle这是我不愿意做的,因为可以有多个不同的父组件。这数千人不是同一父母的直系子女。
memoizedExpensiveFn.Cache = ES6MapWithExpiration;