You can safely use javascript’s array map functionality since that will not modify existing state, which react does not like, and it returns a new array. The process is to loop over the state’s array and find the correct id. Update the done
boolean. Then set state with the updated list.
const toggleDone = (id) => {
console.log(id);
// loop over the todos list and find the provided id.
let updatedList = state.todos.map(item =>
{
if (item.id == id){
return {...item, done: !item.done}; //gets everything that was already in item, and updates "done"
}
return item; // else return unmodified item
});
setState({todos: updatedList}); // set state to new object with updated list
}
Edit: updated the code to toggle item.done
instead of setting it to true.