Skip to content

Todo List Example

A todo list example demonstrating more advanced usage of Nexus State.

Core Implementation

javascript
import { atom, createStore } from '@nexus-state/core';

const todosAtom = atom([]);
const store = createStore();

// Add a todo
const addTodo = (text) => {
  store.set(todosAtom, (prev) => [
    ...prev,
    { id: Date.now(), text, completed: false }
  ]);
};

// Toggle todo completion
const toggleTodo = (id) => {
  store.set(todosAtom, (prev) =>
    prev.map(todo =>
      todo.id === id ? { ...todo, completed: !todo.completed } : todo
    )
  );
};

// Remove a todo
const removeTodo = (id) => {
  store.set(todosAtom, (prev) =>
    prev.filter(todo => todo.id !== id)
  );
};

React Implementation

jsx
import { useAtom } from '@nexus-state/react';

function TodoList() {
  const [todos, setTodos] = useAtom(todosAtom);
  
  const addTodo = (text) => {
    setTodos(prev => [
      ...prev,
      { id: Date.now(), text, completed: false }
    ]);
  };
  
  const toggleTodo = (id) => {
    setTodos(prev =>
      prev.map(todo =>
        todo.id === id ? { ...todo, completed: !todo.completed } : todo
      )
    );
  };
  
  const removeTodo = (id) => {
    setTodos(prev => prev.filter(todo => todo.id !== id));
  };
  
  return (
    <div>
      <TodoForm onAdd={addTodo} />
      <ul>
        {todos.map(todo => (
          <TodoItem
            key={todo.id}
            todo={todo}
            onToggle={toggleTodo}
            onRemove={removeTodo}
          />
        ))}
      </ul>
    </div>
  );
}