我有我的应用程序内的严格模式,这使得它很难运行与我的useEffect()。它基本上在控制台中记录了两次我的所有值,这不是我想要的结果。
useEffect(() => {
console.log('logs some data')
}, []);
它有一种方法,使useEffect只显示数据一次,并保持StrictMode在我的应用程序组件?
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
我确实尝试过使用useRef方法,但我的员工建议我不要使用这种特定的方法,而是尝试另一种可能的方法。
解决方案:如果你需要在组件中保持严格模式,但需要让你的useEffect不渲染两次,你可以使用useRef:
的例子:
let shouldlog = useRef(true);
useEffect(() => {
if (shouldlog.current) {
shouldlog.current = false;
console.log("component mounted");
}
return () => console.log("function cleaned up");
}, []);
我们必须首先理解严格模式的概念,然后我们才能对解决方案做出反应
<StrictMode>
有助于在开发早期发现组件中的常见错误。
参考
严格模式启用以下仅用于开发的行为:
- 你的组件将重新渲染一个额外的时间来发现不纯渲染引起的bug。
- 您的组件将重新运行效果额外的时间,以找到错误造成的缺失的效果清理。
- 你的组件将被检查是否使用了不推荐的api。
所以基本上是用来发现开发过程中的常见错误或bug来构建一个高质量的React应用
您可以利用清理函数来取消冗余的工作,例如使用0超时:
useEffect(() => {
const timeout = setTimeout(() => {
console.log('one console log ' + new Date().valueOf();
}, 0);
return () => {
clearTimeout(timeout);
}
}, []);
生命周期大致如下:创建组件,立即销毁它,再创建它。并与效果:运行效果,立即运行其清理功能,再次运行。