How to mutate data
Learn how to mutate data in your Next.js application.
You can mutate data in Next.js using React's Server Functions. This page will go through how you can create and invoke Server Functions.
Creating Server Functions
A Server Function can be defined by using the use server
directive. You can place the directive at the top of an asynchronous function to mark the function as a Server Function, or at the top of a separate file to mark all exports of that file. We recommend using a separate file in most instances.
Server Components
Server Functions can be inlined in Server Components by adding the "use server"
directive to the top of the function body:
Client Components
It's not possible to define Server Functions in Client Components. However, you can invoke them in Client Components by importing them from a file that has the "use server"
directive at the top of it:
Invoking Server Functions
There are two mains ways you can invoke a Server Function:
- Forms in Server and Client Components
- Event Handlers in Client Components
Forms
React extends the HTML <form>
element to allow Server Function to be invoked with the HTML action
prop.
When invoked in a form, the function automatically receives the FormData
object. You can extract the data using the native FormData
methods:
Good to know: When passed to the action
prop, Server Functions are also known as Server Actions.
Event Handlers
You can invoke a Server Function in a Client Component by using event handlers such as onClick
.
Showing a pending state
While executing a Server Function, you can show a loading indicator with React's useActionState
hook. This hook returns a pending
boolean:
Revalidating the cache
After performing a mutation, you can revalidate the Next.js cache and show the updated data by calling revalidatePath
or revalidateTag
within the Server Function:
Redirecting
You may want to redirect the user to a different page after performing a mutation. You can do this by calling redirect
within the Server Function: