我在這里的代碼示例中看到了一些意想不到的東西:https : //codesandbox.io/s/react-redux-application-forked-lb7zk?file=/src/pages/DashboardPage.js : 415-452
我正在記錄x變數的變化(來自 redux 狀態)。
我分派了 2 個可以相互取消的動作:
x從 1 開始- 第一次調度將其更改為:
x=2 - 第二次調度將其改回:
x=1
我期待看到 3 個 console.logs,一個用于初始渲染,另外兩個用于上述每個更改。但相反,我只得到 1,即初始渲染的一個。似乎因為它們都是突然發生的,redux 似乎對操作進行批處理,因此在這種情況下狀態并沒有真正改變。
這真的讓我懷疑,我想了解這是怎么回事,這是怎么回事?
uj5u.com熱心網友回復:
編輯:React 批量處理事件處理程式和生命周期方法中發生的狀態更新。因此,如果您在 UseEffects 鉤子中多次更新狀態,React 將在重新渲染之前等待事件處理完成。
相關問題
你是對的。發生的事情是它一次運行所有 3 個操作,并且在狀態更新后運行 console.log() 。它本質上是這樣運行的:
useEffect(() => {
dispatch(test(2));
dispatch(test(1));
console.log("Did X change?", x);
}, [dispatch, x]);
uj5u.com熱心網友回復:
我相信原因是 React 中的自動批處理。正如我們所知,“React 將多個狀態更新分組為一次重新渲染以獲得更好的性能”。
有關更多資訊,請查看 React 18 Group 中的精彩討論:https : //github.com/reactwg/react-18/discussions/21
我希望它有助于幫助您發現您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/318253.html
上一篇:未處理的拒絕(型別錯誤):moralis__WEBPACK_IMPORTED_MODULE_1__.Moralis.start不是函式
