¿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 método, encabezados y JSON en ambas direcciones, para mover una cadena desde un formulario a una base de datos.
Una Server Action lo elimina todo. Escribe una función asíncrona 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: estas entradas de formulario son no controladas. Sin useState, sin value, sin onChange: el navegador conserva el texto, y el atributo name es la forma en que la acción lo encuentra al enviarlo.
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