Add a Todo Item

Now it's time to add a todo item. We are working on the components/Todos.js file.

First import mutate from SWR like this:

import useSWR, {mutate} from 'swr'

Then replace the addTodo function with the following:

const addTodo = async (todoName) => {
    const addRes = await fetch('/api/todo', {
        method: 'POST',
        headers: {
        'Content-Type': 'application/json'
        body: JSON.stringify({name: todoName})

    if (!addRes.ok) {
        const {error} = await addRes.json()
        throw new Error(error.message);

    await mutate('/api/todos')


(Here's the modified version of the components/Todos.js file.)

In this code, we make an HTTP POST request to add a todo item. Then we call the following mutate function.

await mutate('/api/todos')

In this case, what mutate does is pretty simple. It will refetch data related to the cache key(api/todos) and re-render the UI.

Okay, now it's time for a question:

Now try to add a couple of todo items.
(You can reset items on the todo list by modifying any file in this app.)

Q: How do you describe your experience?