React

1 post
  • 使用 useReducer 來處理複雜的 state

    最近在 Medium 上看到一篇文章說,在處理比較複雜的 state 時,應該使用 useReducer 將 state 變化的邏輯從 component 中抽離出來。想想覺得滿有道理的,以不久前做的 todo-app 為例子,如果我想要更新其中一個 todo 的話,用 useState 我需要在 component 這樣寫:

    const checked = e.currentTarget.checked;
    const nextTodos = todos.map(todo => {
      if (todo.id === id) return { ...todo, isCompleted: checked };
    
      return todo;
    });
    setTodos(nextTodos);

    但如果是用 useReducer 的話,我只需要這樣寫:

    const checked = e.currentTarget.checked;
    dispatch({ type: 'check', payload: { checked, id } });

    因為更新 state 的邏輯從 component 中抽離出來,所以在 component 內只需要把 action 傳進 dispatch 就好,是不是簡潔許多?

    2022-04-23