javascript - 如果初始值是具有大量计算的函数,useState 是否会导致渲染?
问题描述
我正在学习反应钩子,需要对此有所了解。
考虑下面的代码:
const [state, setState] = useState(() => {
const initialState = someExpensiveComputation(props);
return initialState;
});
如果 dom 已经渲染,然后 someExpensiveComputation 完成,那之后会重新渲染 dom 吗?
任何帮助都会很有用。
解决方案
它不会再次渲染,但同时会等到计算结束,因为它是同步操作,无法异步处理初始计算。
从用户体验和应用程序性能的角度来看,更好的选择是在使用useState()
. 相反,您可以使用useEffect()
:
Effect Hook 允许您在函数组件中执行副作用。
例如,对于空依赖数组,它将只执行一次:
const [result, setResult] = useState(null);
useEffect(() => {
const value = someExpensiveComputation(props);
setResult(value);
}, []);
最后,此解决方案将再次导致渲染,但您可以在return
语句中处理它,如下所示:
return <>
{
result && <p>Result: {result}</p>
}
<>
我希望这会有所帮助!
推荐阅读
- java - 将属性绑定到从 JavaFx / TornadoFX 中的控件派生的值的正确方法
- jenkins - 我在字符串中有一个 Jenkins 全局变量 - 我如何评估它?
- javascript - 在无状态反应组件中让表单提交数据的正确方法是什么?
- php - 没有php内置排序功能的排序数组
- vbscript - 创建一个 VBScript 从文件服务器中获取字体
- python - 删除动态创建的 Qmenu 项
- php - 数字 * 价格计算不正确
- class - 在 Dart 类中处理回调
- haskell - 如何更新 State monad 中的部分状态?
- apache-kafka - 如何让 kafka-console-consumer.sh 消耗给定主题的所有分区?