Cambiar la marca de completado para todas las tareas con el uso del Reducer
Intenté convertir mi aplicación de react-todo de useState a useReducer, hice la mayoría de las funcionalidades, pero no pude cambiar la bandera completed en mis tareas completadas. Intenté todas las soluciones posibles, pero no pude resolverlo. Por favor ayúdame con esto, ¿qué debo escribir en el caso TOGGLE_TODO para negar mi Boolean completed?
Función Reductor:
const reducer = (state, action) => {
switch (action.type) {
case ACTIONS.setInputText:
return { ...state, inputText: action.payload.value };
case ACTIONS.ADD_TODO:
if (state.inputText.trim()) {
return {
...state,
todos: [
...state.todos,
{ name: state.inputText, id: uuid.v4(), completed: false }
],
inputText: "",
};
}
return state;
case ACTIONS.DELETE_TODO:
return {
...state,
todos: state.todos.filter((todo) => todo.id !== action.payload.id)
};
case ACTIONS.TOGGLE_TODO:
default:
return state;
}
};
Y aquí está mi componente de todo:
import React from "react";
import tdstyle from "../style/Todo.module.css";
import { ACTIONS } from "../App";
const Todo = ({ text, dispatch, todo }) => {
return (
<div classname="{tdstyle.listContainer}">
<li>{text}</li>
<div>
<button onclick="{()" ==""> {
dispatch({ type: ACTIONS.DELETE_TODO, payload: { id: todo.id } });
}}
>
X
</button>
<button onclick="{()" ==""> {
dispatch({ type: ACTIONS.TOGGLE_TODO, payload: { id: todo.id } });
}}
>
V
</button>
</div>
</div>
);
};
export default Todo;
davy.ai
Para cambiar el indicador
completed
en tustodos
, puedes escribir el siguiente código en el casoTOGGLE_TODO
del reductor:Aquí, estás recorriendo el arreglo
todos
en tu estado y verificando si elid
del todo actual coincide con elid
pasado en la carga útil de la acción. Si coincide, estás devolviendo un nuevo objeto con el indicadorcompleted
negado, de lo contrario estás devolviendo el objeto de todo original. El operador de propagación...state
asegura que el resto de tu estado no se vea afectado.Esto debería cambiar el indicador
completed
para el todo correspondiente cuando se envíe la acciónTOGGLE_TODO
.