Skip to main content

With Immer

import { produce } from 'immer';

const useTodoStore = createStore(({ set }) => ({
todos: [
{ title: 'Learn JavaScript', done: true },
{ title: 'Try Immer', done: false },
],

// Without immer
toggleTodoWithoutImmer: (index) => {
set(({ todos }) => {
const nextTodos = todos.slice(); // Shallow clone the array
nextTodos[index] = { ...nextTodos[index], done: !nextTodos[index].done };
return { todos: nextTodos };
});
},

// With immer
toggleTodo: (index) => {
set(
produce(({ todos }) => {
todos[index].done = !todos[index].done;
})
);
},
}));

View Immer docs: https://immerjs.github.