我希望在react应用程序首次加载时运行一次,而且只能运行一次。一开始,人们倾向于使用useEffect
钩子:
useEffect(() => {
console.log("Effect hook.");
}, []);
这种方法的问题是,当我把它放到我的App
组件中时,useEffect
钩子会在AFTER挂载后运行。随后,下面的代码将失败,因为在呈现子组件时不会定义内容:
function App() {
let stuff;
// Define the supported configs on mount. This will only run at mount time.
useEffect(() => {
console.log("Effect hook.");
stuff = getSomeStuff();
}, []);
//
console.log("About to return.");
return (
<div>
<ComponentThatNeedsStuff stuff={stuff} />
</div>
);
}
您将看到以下打印内容:
About to return.
Effect hook.
如果您只想让函数getSomeStuff
运行一次,但您需要子组件所需的内容,最好的处理方法是什么?
2条答案
按热度按时间rfbsl7qr1#
在渲染之前**运行代码通常表明您违背了React的工作方式。
dly7yett2#
这听起来像是useMemo的工作。它允许您在渲染期间进行计算,但在稍后的渲染中,它可以跳过计算并重用先前的值: