import "./styles.css";
import { useEffect, useState } from "react";
export default function App() {
const [state, setState] = useState(0);
useEffect(() => {
return () => {
// setState(1)
console.log("inside cleanup");
};
}, []);
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
{console.log(state)}
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
cleanup 中的 console.log() 正在瀏覽器中得到控制臺。我不確定為什么會發生這種情況。根據我的概念,當組件在狀態更改時更新并且該狀態是依賴陣列的一部分,或者根本沒有依賴陣列時,應該呼叫清理
uj5u.com熱心網友回復:
如果您將應用程式包裝在<StrictMode>組件中,則將被掛載/卸載/重新掛載以識別潛在的不安全生命周期。這僅在開發模式下發生。
uj5u.com熱心網友回復:
useEffect清理函式不僅在我們的組件要卸載時運行,它還在執行下一個預定效果之前運行。
實際上,useEffectexecutes之后,下一個調度效果通常是基于dependency(array)。
在strict模式下,開發構建useEffect會執行兩次。因此,在下一個預定效果之后運行清理。來自反應檔案
每次渲染都會運行效果,而不僅僅是一次。這就是為什么 React 還會在下次運行效果之前清理上一次渲染中的效果。
uj5u.com熱心網友回復:
import "./styles.css";
import { useEffect, useState } from "react";
export default function App() {
const [state, setState] = useState(0);
這里的所有代碼只被呼叫一次
useEffect(() => {
return () => {
// setState(1)
console.log("inside cleanup");
};
}, []);
這里的所有代碼都會在每次狀態更新、第一次渲染或更新其父級時呼叫
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
{console.log(state)}
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/477011.html
標籤:反应
上一篇:反應組件不重繪
