¿Qué es una Server Action?
Parte de la sección Esenciales de Next.js del Journey de React de Coddy — lección 29 de 47.
Ahora ya puedes leer datos en el servidor. Es hora de la otra mitad: cambiarlos.
Hasta hace poco, guardar una línea de texto requería una cantidad sorprendente de ceremonia. Escribías un endpoint:
// app/api/items/route.js
export async function POST(request) {
const body = await request.json();
saveItem(body.text);
return Response.json({ ok: true });
}…después lo llamamos desde el navegador:
await fetch('/api/items', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text }),
});Dos archivos, una URL, un method, headers y JSON en ambas direcciones, para mover una cadena desde un form a una base de datos.
Una Server Action elimina todo esto. Escribe una función asíncrona (async) en un archivo cuya primera línea sea 'use server':
// app/actions.js
'use server';
import { saveItem } from '../lib/db';
export async function addItem(formData) {
saveItem(formData.get('text'));
}…y pasar esa función a un formulario:
<form action={addItem}>
<input name="text" />
<button type="submit">Add</button>
</form>Eso es todo. Vale la pena mencionar tres detalles:
'use server'debe ser la primera línea del archivo: el mismo tipo de marcador que'use client', apuntando en la otra dirección. Dice: todo lo que se exporte aquí se ejecuta en el servidor.- El cuerpo de la función nunca llega al navegador. Las credenciales de tu base de datos están seguras dentro de él: el navegador solo recibe una referencia que puede llamar.
- Nunca escribiste una URL. Next.js crea el endpoint por ti;
action={addItem}es la conexión.
Un contraste con Fundamentos: estos inputs de formulario son no controlados. Sin useState, sin value, sin onChange: el navegador conserva el texto, y el atributo name es como la action lo encuentra al hacer submit.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Esenciales de Next.js
2Enrutamiento y enlaces
Las carpetas son rutasRutas anidadasEnlaces entre páginasRutas dinámicasPáginas no encontradasRecapitulación: Enrutamiento3Diseños y Metadatos
El diseño raízNavegación compartidaDiseños anidadosMetadatos de la páginaMetadatos dinámicosRecapitulación: Diseños6Server Actions
¿Qué es una Server Action?Formularios con acciónLectura de datos del formularioActualización de la páginaRecapitulación: Server Actions