reactjs - 在 React Hooks 中处理常量的最佳实践
问题描述
使用 React Hooks,存储需要大量计算来初始化但在重新渲染时不会改变的常量的最佳实践是什么?
选项 1:钩子定义之外的常量
const x = heavyCalculation();
export default function MyHook() {
return <div>x</div>
}
选项 2:使用备忘录
export default function MyHook() {
const x = useMemo(() => heavyCalculation(), [])
return <div>x</div>
}
选项 3:useRef
export default function MyHook() {
const x = useRef(heavyCalculation())
return <div>x</div>
}
我喜欢选项 1,但我不知道它是否被认为是风格上最好的钩子。
解决方案
选项 1有效,但它不是特别灵活 - 如果在给定时间呈现多个实例,并且它们并不都共享相同的heavyCalculation
结果怎么办?但是,如果您可以指望该值只需在所有组件中精确计算一次,那就去吧。
选项 2 是正确的选择,但请注意,您可以将其简化为:
export default function MyHook() {
const x = useMemo(heavyCalculation, [])
return <div>{x}</div>
}
(另请注意,您确实需要{x}
,而不仅仅是x
,来显示x
结果)
选项 3 将不起作用,因为heavyCalculation
将在每次渲染时调用。(您还必须参考x.current
,而不仅仅是x
)
推荐阅读
- wordpress - 在 Wordpress-Oxygen 中管理颜色的问题
- ios - 颤振错误没有名为“scrollBehavior”的命名参数
- reactjs - 元素类型无效:需要一个字符串(具有正确的导入/导出
- python - 重复元音最多的列表中的单词?更多pythonic解决方案?
- windows - 为什么从 PowerShell 运行的 Perl 脚本可以在新控制台中运行,而 Python 脚本却不能?
- python - 在不下载的情况下检索 Youtube 视频流
- python - Xpath 返回 null
- r - 可以从文档开头以外的任何地方预览 R Markdown 吗?
- c# - 为网格视图内的控件分配 ID
- reactjs - React - 提交表单时关闭模式