sandra-larsson
Educator Fullstack Developer Javascript at Chas Academy
Mer sofistikerad
Ersätter useState för de states som behandlas med useReducer
(state, action) => newState
En reducer är en funktion som tar två argument, nuvarande state och en action (vad som ska ske) och returnerar ett nytt state utifrån det.
const [input, setInput] = useState("")
const [todos, setTodos] = useState([])
const [state, dispatch] = useReducer(reducer, {todos: [], input: ""})
STATE VARIABLER
FUNKTIONER FÖR ATT FÖRÄNDRA STATE
INITIALA VÄRDEN FÖR VARJE STATE
Ett objekt som innehåller hela state för komponenten!
ersätter useState för de states som berörs
(switch är konvention, men fungerar precis samma som if/else)
const reducer = (state, action) => {
switch (action.type) {
case "ADD":
{
// Logic to add a todo to todolist
};
case "EDIT":
{
// Logic to edit a todo in todolist
};
case "DELETE":
{
// Logic to remove a todo from todolist
};
default:
return state;
}
};
uppdaterar state genom nuvarande state och action
När vi modifierar state använder vi dispatch. Den funktionen måste alltid ha en action associerad. Om man vill skicka med extra information använder man payload. Namnen "type" och "payload" är konventioner om hur useReducers brukar användas.
const handleSubmit = (event) => {
event.preventDefault();
dispatch({
type: "ADD",
payload: input
})
}
const reducer = (state, action) => {
switch (action.type) {
case "ADD":
{
return {
...state,
todos: [...state.todos, action.payload]
};
case "EDIT":
{
// Logic to edit a todo in todolist
};
case "DELETE":
{
// Logic to remove a todo from todolist
};
default:
return state;
}
};
"Each “action” should not mutate the state. We should always return new state based on previous one" => se länk
Applicerad på en Counter (increment, decrement, addValue)
By sandra-larsson