簡體   English   中英

React Hooks 重新渲染

[英]React Hooks Re-renders

我有一個具有兩塊 state 的功能組件:

 let [data, setData] = useState([]);
 let [loading, setLoading] = useState(false);

我還有一個簡單的 useEffect 掛鈎,它調用 function 並返回 promise:

 useEffect(() => {
    someFunctionThatReturnsAPromise().then({
            console.log("Before setData");
            setData(dataFromFetch);
            console.log("After setData");
            console.log("Before setLoading");
            setLoading(true);
            console.log("After setLoading");
        }
        );
},[]);




return (
        <div>
            console.log("Hey i rendered");
        </div>
    );

看到我有一個空的依賴數組( [] 在 useEffect 內),這個 useEffect 只會運行一次。 我的問題是:

看到 setData 會導致組件重新渲染,不應該在代碼到達setData(dataFromFetch); ,執行不應該停止嗎? 在我的控制台日志中,這是打印的內容:

Hey i rendered
Before setData
Hey i rendered
After setData
Before setLoading
Hey i rendered
After setLoading

我期待的是:

Hey i rendered
Before setData
Hey i rendered

為什么即使在組件重新渲染后仍繼續執行? 我在哪里可以 go 閱讀這樣的內容?

setState被添加到 javascript 事件堆棧中,並且本質上是異步的,並且 useEffect 正在通過 javascript 調用堆棧完全執行,而不管堆棧末尾添加的其他異步函數(例如 console.logs 和 setStates)

https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous

這是一篇關於事件隊列/javascript生命周期的文章,可以更好地解釋: https://flaviocopes.com/javascript-event-loop/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM