رد فعل useReducerهوك


useReducerالخطاف مشابه للخطاف useState.

يسمح لمنطق الحالة المخصص.

إذا وجدت نفسك تتعقب أجزاء متعددة من الحالات التي تعتمد على منطق معقد ، useReducerفقد يكون من المفيد.


بناء الجملة

يقبل الخطاف useReducer الوسيطتين.

useReducer (<المخفض> ، <initialState>)

تحتوي reducerالوظيفة على منطق الحالة المخصص الخاص بك initialStateويمكن أن تكون قيمة بسيطة ولكنها تحتوي بشكل عام على كائن.

يقوم useReducerالخطاف بإرجاع التيار stateوالطريقة dispatch.

فيما يلي مثال useReducerعلى تطبيق مضاد:

مثال:

import { useReducer } from "react";
import ReactDOM from "react-dom";

const initialTodos = [
  {
    id: 1,
    title: "Todo 1",
    complete: false,
  },
  {
    id: 2,
    title: "Todo 2",
    complete: false,
  },
];

const reducer = (state, action) => {
  switch (action.type) {
    case "COMPLETE":
      return state.map((todo) => {
        if (todo.id === action.id) {
          return { ...todo, complete: !todo.complete };
        } else {
          return todo;
        }
      });
    default:
      return state;
  }
};

function Todos() {
  const [todos, dispatch] = useReducer(reducer, initialTodos);

  const handleComplete = (todo) => {
    dispatch({ type: "COMPLETE", id: todo.id });
  };

  return (
    <>
      {todos.map((todo) => (
        <div key={todo.id}>
          <label>
            <input
              type="checkbox"
              checked={todo.complete}
              onChange={() => handleComplete(todo)}
            />
            {todo.title}
          </label>
        </div>
      ))}
    </>
  );
}

ReactDOM.render(<Todos />, document.getElementById('root'));


هذا هو مجرد منطق لتتبع حالة المهام الكاملة.

يمكن احتواء كل منطق إضافة وحذف وإكمال المهام في useReducerخطاف واحد عن طريق إضافة المزيد من الإجراءات.