iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
SideProject30

30 天大冒險:新手勇闖 React 大秘境系列 第 16

DAY 16 - 複雜交給 useReducer

  • 分享至 

  • xImage
  •  

⭐任務說明

😸 學習使用 useReducer

useReducer 是什麼

  • 用於管理元件中的狀態,可以處理複雜狀態邏輯

如何使用

import { useReducer } from 'react';

function reducer(state, action) {
  // ...
}

function MyComponent() {
  const [state, dispatch] = useReducer(reducer, { age: 42 });
  // ...
  

練習看看

  • 做一個點選功能鍵後會把畫面上的數值 + 1

  • 我們先以 useReducer 建立狀態,並且預設狀態是 num:15

export default function Counter() {
  const [state, dispatch] = useReducer(reducer, { num: 15 });
  return (
  ...
}

  • 再來我們的畫面上會有一個 +1 的功能鍵,以及顯示當前狀態的欄位
  • 在使用者點選功能鍵時,呼叫 dispatch ,並且傳入資料
export default function Counter() {
  const [state, dispatch] = useReducer(reducer, { num: 15 });
  return (
    <>
      <h1>React 大秘境 DAY 16</h1>
      <button
        onClick={() => {
          dispatch({ type: "addNum" });
        }}
      >
        點我 +1
      </button>
      <p>團購 + {state.num} .</p>
    </>
  );
}
  • 在呼叫 dispatch ,就是執行 reducer
  • 這邊會傳入當前的 state 和 type
function reducer(state, action) {
  // console.log(action);
  if (action.type === "addNum") {
    return {
      num: state.num + 1
    };
  }
  throw Error("不存在");
}

結語

😸 透過 useReducer 可以讓狀態有比較複雜的變化,我們下個任務見!


上一篇
DAY 15 - 今天來點 useRef
下一篇
DAY 17 - 使用 useCallback 的不變記憶術
系列文
30 天大冒險:新手勇闖 React 大秘境30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言