嘿,我對這段代碼有疑問。
const [itemsCart, setCart] = useState([]);
useEffect(() => {
(async function (){
const buffer = await JSON.parse(window.sessionStorage.getItem("itemsCart"))
setCart(buffer);
console.log(buffer);
console.log(itemsCart);
})()
}, []);
useEffect(() => {
window.sessionStorage.setItem("itemsCart", JSON.stringify(itemsCart));
}, [itemsCart]);
緩沖區獲取資料,狀態變數不獲取。我認為同步肯定有問題,但我無法解決這個問題。輸出: 這里
uj5u.com熱心網友回復:
這個問題不正確,解決問題的方法也不正確(無論您要解決什么問題)。React 有不同的設計。
您正在嘗試獲取專案,然后在使用 useEffect 獲取專案后對其進行設定。
最好的方法是將您的陣列作為來自高階組件的道具傳遞,然后在依賴項觸發后使用您的 useEffect(傳遞的道具)
在渲染組件之前運行 useEffect 鉤子
uj5u.com熱心網友回復:
發生這種情況是因為 react 將等到 useEffect 中的所有腳本被呼叫,然后 setState 將觸發重新渲染。因為可以有多個 setState,我們只想重新渲染一次。這意味著,您在console.log(itemsCart)重新渲染后實際存在之前記錄舊值。
您可以useEffect在更新 sessionStorage 之前先登錄它,然后您會看到,該狀態已更改。或者您可以為此創建新的 useEffect
useEffect(()=>{
console.log(itemsCart)
},[itemsCart]);
uj5u.com熱心網友回復:
這有效:
const [itemsCart, setCart] = useState(JSON.parse(window.localStorage.getItem("itemsCart")));
useEffect(() => {
console.log(itemsCart);
window.localStorage.setItem("itemsCart", JSON.stringify(itemsCart));
}, [itemsCart]);
uj5u.com熱心網友回復:
要運行第二個useEffect(),itemsCart需要在之前通過 useState() 進行修改。useEffect()當你打電話時,我看不到你的第一眼setItemsCart()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/503799.html
標籤:javascript 反应
上一篇:模態出現后的焦點輸入React
