Post

useReducer

useReducer

React Hook: useReducer

useReducer er et React-hook, som giver en måde at håndtere mere kompleks state-logik end det, som useState tillader. Den er nyttig, når din state har mange forskellige værdier eller når ændringer i state kræver avanceret logik. useReducer fungerer lidt ligesom state-håndtering i Redux, men er mindre kompleks og indbygget direkte i React.

Hvordan useReducer fungerer

useReducer tager to primære argumenter:

Reducer-funktionen: En funktion, som bestemmer, hvordan state skal opdateres baseret på en given action.
Initial state: Startværdien for din state.

1
const [state, dispatch] = useReducer(reducer, initialState);

state er den nuværende state.
dispatch er en funktion, som bruges til at sende en action til reduceren for at ændre state.

Reducer-funktion

Reducer-funktionen modtager to parametre:

  • Den aktuelle state.
  • En action, som beskriver, hvilken ændring vi vil foretage i state. Reducer-funktionen returnerer en ny state baseret på action-typen.
1
2
3
4
5
6
7
8
9
10
function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
}

Simpelt eksempel

Her er et simpelt eksempel, der bruger useReducer til en tæller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import React, { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, { count: 0 });

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'increment' })}>+</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
    </div>
  );
}

I dette eksempel:

  • dispatch({ type: 'increment' }) sender en action til reduceren, som øger tælleren.
  • dispatch({ type: 'decrement' }) sender en action, som sænker tælleren.

Hvornår skal man bruge useReducer? Man kan overveje at bruge useReducer når:

  • State har mange forskellige værdier, eller når flere komponenter skal håndtere det samme state.
  • Ændringer i state kræver komplekse logikker, der ikke håndteres let med useState.
This post is licensed under CC BY 4.0 by the author.