- "content": "import { createSignal, batch, For } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport { createLocalStore, removeIndex } from \"./utils\";\n\ntype TodoItem = { title: string; done: boolean };\n\nconst App = () => {\n const [newTitle, setTitle] = createSignal(\"\");\n const [todos, setTodos] = createLocalStore<TodoItem[]>(\"todos\", []);\n\n const addTodo = (e: SubmitEvent) => {\n e.preventDefault();\n batch(() => {\n setTodos(todos.length, {\n title: newTitle(),\n done: false,\n });\n setTitle(\"\");\n });\n };\n\n return (\n <>\n <h3>Simple Todos Example</h3>\n <form onSubmit={addTodo}>\n <input\n placeholder=\"enter todo and click +\"\n required\n value={newTitle()}\n onInput={(e) => setTitle(e.currentTarget.value)}\n />\n <button>+</button>\n </form>\n <For each={todos}>\n {(todo, i) => (\n <div>\n <input\n type=\"checkbox\"\n checked={todo.done}\n onChange={(e) => setTodos(i(), \"done\", e.currentTarget.checked)}\n />\n <input\n type=\"text\"\n value={todo.title}\n onChange={(e) => setTodos(i(), \"title\", e.currentTarget.value)}\n />\n <button onClick={() => setTodos((t) => removeIndex(t, i()))}>\n x\n </button>\n </div>\n )}\n </For>\n </>\n );\n};\n\nrender(App, document.getElementById(\"app\")!);\n"
0 commit comments