使用React hooks定义计算出的(初始化)常量可以通过两种看似功能相同的方式完成。我不想深入探讨这个用例,但可以说有时可以从初始props或状态中派生出不会预期改变的常量值(考虑路由数据、绑定调度等)。
首先,使用useState
const [calculatedConstant] = useState(calculateConstantFactory);
其次,useMemo
const calculatedConstant = useMemo(calculateConstantFactory, []);
这两者看起来在功能上是等价的,但如果不阅读源代码,我不确定哪个在性能或其他考虑因素方面更好。
有人对此进行了研究吗?你会使用哪个,为什么?
另外,我知道有些人会对“状态可以被视为常量”的假设感到不适。我不确定怎么告诉你。但即使没有状态,我可能还想在一个没有任何状态的组件中定义一个常量,例如创建一个不变的 JSX 块。
我可以将其定义在组件之外,但是这样会消耗内存,即使该组件在应用程序中没有实例化也是如此。为了解决这个问题,我需要创建一个记忆函数,然后手动释放内部记忆状态。这对于 hooks 来说是一件很麻烦的事情。
编辑:添加了在此讨论中讨论的方法的示例。 https://codesandbox.io/s/cranky-platform-2b15l
useState
和useMemo
这样的工厂函数。 - bfrickaconst calculatedConstant = useRef(calculateConstantFactory);
。如果有帮助,只是提出第三个选项。 - AlvarocalculatedConstant.current === calculateConstantFactory
。你仍然需要调用工厂来获取你的值。在我的示例中,工厂只被调用一次。 - bfricka