我已經閱讀了所有關于在 React 中為陣列設定狀態的問題和答案,但似乎沒有一個能解決我的問題。
我像這樣初始化我的陣列:
const initialStates = {cellStatuses: () =>Array(6).fill(Array(5).fill(status.unguessed)),
}
const [dailyCellStatuses, setDailyCellStatuses] = useLocalStorage('dailyCellStatuses', initialStates.cellStatuses)
const [cellStatuses, setCellStatuses] = useState(initialStates.cellStatuses)
然后我使用一個效果來模仿 componentDidMount 并在那個效果中檢查是否需要更新 cellStatuses
useEffect (() => {
if (gameMode && playedAlreadyToday(lastPlayedDate)) {
setBoard(dailyBoard)
setCellStatuses(dailyCellStatuses)
console.log(cellStatuses, 'cell statuses')
} else {
setBoard(initialStates.board)
}
控制臺始終使用我嘗試設定的新 dailyCellStatuses 記錄它永遠不會更新的舊狀態。我試過克隆dailyCellStatuses[...dailyCellStatuses]
我試過在setter中呼叫一個函式我真的卡住了。幫助!
uj5u.com熱心網友回復:
您的狀態更新正常,您的問題是控制臺在同一渲染周期中記錄值,
控制臺記錄 useEffect 之外的值,或者您可以執行此操作
if (gameMode && playedAlreadyToday(lastPlayedDate)) {
setBoard(dailyBoard)
setCellStatuses(dailyCellStatuses)
console.log(dailyCellStatuses, 'cell statuses')
} else {
setBoard(initialStates.board)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419524.html
標籤:
上一篇:使用Tailwind.css在React.js中動態添加類名
下一篇:為什么rem的值沒有變化?
