javascript - 反应:useEffect vs useMemo vs useState
问题描述
我试图在网上找到一个简洁的答案,但没有运气。
以下关于和之间useEffect
的差异是否正确?useMemo
useState
- 两者
useState
都会useMemo
在渲染中记住一个值。不同之处在于:useMemo
不会导致重新渲染,useState
而useMemo
仅在其依赖项(如果有)发生更改时运行,而setSomeState
(由 返回的第二个数组项useState
)没有这样的依赖项数组
- 两者 都只在它们的依赖关系发生变化时运行(如果有的话)
useMemo
。useEffect
不同之处在于:useEffect
在渲染发生后运行,而在渲染发生之前useMemo
运行
我错过了任何其他关键差异吗?
解决方案
你的观点基本上是正确的,一些小的澄清:
useState在调用 setState 方法时导致重新渲染(返回数组中的第二个元素)。它没有任何依赖,例如 useMemo 或 useEffect。
useMemo仅在其依赖数组中的元素发生更改时重新计算一个值(如果没有依赖项 - 即数组为空,它将只重新计算一次)。如果数组被遗漏,它将在每次渲染时重新计算。调用该函数不会导致重新渲染。它还在组件渲染期间而不是之前运行。
如果其依赖数组中的元素已更改或数组被遗漏,则在每次渲染后调用useEffect 。如果数组为空,它只会在初始挂载时运行一次(如果返回清理函数则卸载)。
您可以随时查看Hooks API Reference,在我看来这是一个非常可靠的文档
推荐阅读
- moodle - Moodle 3.7 中的密码哈希生成算法
- java - 数组中的 ItemList Android Studio
- shell - 优雅地关闭 Apache Ignite
- regex - Web 场景解析 access_token 失败
- python - 在 Python 中将 mp3 合并为一个
- python - 拟合区间变化的斜率误差
- javascript - 通过单击按钮将布尔值设置为 false,是否有更好的编程方法?
- javascript - 无法裁剪 TypeScript 实体的响应
- python - 转换成int后从数据框中去掉0
- python - 为什么 web = Browser 功能在我的代码中不起作用