React使用useReducer的方式

React useReducer的输出

我是一年级的専門学校生Naoyuki。为了进行React学习的输出,我想第一次写一篇文章。

useReducer是什么?

一个用于状态管理的 React Hooks。它被用于管理比 useState 更复杂的逻辑。

成品

スクリーンショット 2023-10-22 150208.png
import { useReducer } from "react";

const reducer = (state, { type, payload }) => {
  switch (type) {
    case "change":
      return { ...state, [payload.name]: payload.value };
    default:
      return state;
  }
};

const Example = () => {
  const [state, dispatch] = useReducer(reducer, { a: 0, b: 0 });

  const ChangeHandler = (e) => {
    dispatch({
      type: "change",
      payload: { name: e.target.name, value: e.target.value },
    });
  };

  return (
    <>
      <div>
        a:
        <input type="text" value={state.a} name="a" onChange={ChangeHandler} />
      </div>
      <div>
        b:
        <input type="text" value={state.b} name="b" onChange={ChangeHandler} />
      </div>
      <h1>
        a:{state.a}
        <br></br>
        b:{state.b}
      </h1>
    </>
  );
};

export default Example;

说明

导入 useReducer。

import { useReducer } from "react";

定义 useReducer

在state中包含了{a: 0, b: 0}
通过dispatch()调用reducer函数

const [state, dispatch] = useReducer(reducer, { a: 0, b: 0 });

定义输入元素

将”value”分别赋值为state中的”a”和”b”,
将”name”赋值为”a”和”b”,
在”onChange”中调用ChangeHandler函数。

    <>
      <div>
        a:
        <input type="text" value={state.a} name="a" onChange={ChangeHandler} />
      </div>
      <div>
        b:
        <input type="text" value={state.b} name="b" onChange={ChangeHandler} />
      </div>
      <h1>
        a:{state.a}
        <br></br>
        b:{state.b}
      </h1>
    </>

定义一个 ChangeHandler 函数。

据说通常使用dispatch()调用reducer函数,将type和payload作为参数以对象的形式进行传递。
type用于描述操作的内容
payload用于以对象的形式描述执行该操作所需的值。

  const ChangeHandler = (e) => {
    dispatch({
      type: "change",
      payload: { name: e.target.name, value: e.target.value },
    });
  };

定义reducer函数

使用state获取当前a和b的值
changeHandler中的值将存储在type和payload中
如果type为”change”,则通过扩展运算符返回当前state,并更新接收到的name和value的值

使用state获取当前a和b的值
将ChangeHandler中的值存储在type和payload中
如果type为”change”,则使用扩展运算符返回当前state,并更新接收到的name和value的值

使用state获取当前a和b的值
type和payload将包含ChangeHandler中的值
如果type为”change”,则通过扩展运算符返回当前state,并更新接收到的name和value的值

使用state获取当前a和b的值
ChangeHandler中的值将赋予type和payload
如果type为”change”,则通过扩展运算符返回当前state,并修改接收到的name和value的值

const reducer = (state, { type, payload }) => {
  switch (type) {
    case "change":
      return { ...state, [payload.name]: payload.value };
    default:
      return state;
  }
};
广告
将在 10 秒后关闭
bannerAds