簡體   English   中英

在 useEffect 掛鈎中反應更新 state 數組

[英]React update state array in useEffect hook

我已經閱讀了有關在 React 中的數組上設置 State 的所有問題和答案,但似乎沒有一個可以解決我的問題。

我像這樣初始化我的 arrays:

 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)
    }

控制台始終記錄舊的 state 它永遠不會使用我嘗試設置的新 dailyCellStatuses 進行更新。 我嘗試克隆dailyCellStatuses [...dailyCellStatuses]我嘗試在setter 中調用function 我真的卡住了。 幫助!

您的 state 更新正常,您的問題是控制台在同一渲染周期中記錄值,

控制台記錄 useEffect 之外的值,或者您可以執行此操作

    if (gameMode && playedAlreadyToday(lastPlayedDate)) {
      setBoard(dailyBoard)
      setCellStatuses(dailyCellStatuses)
      console.log(dailyCellStatuses, 'cell statuses')
    } else {
      setBoard(initialStates.board)
    }

暫無
暫無

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

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