Next.js ora consente agli sviluppatori di chiamare funzioni esclusivamente lato server direttamente da un componente, eliminando la necessità di creare route API separate per attività quotidiane come l'invio di moduli. Utilizzando la nuova funzionalità Server Actions, un singolo modulo HTML può attivare il codice backend senza una chiamata fetch intermedia, riducendo il boilerplate e rendendo più solido il contratto tra front-end e back-end.
Perché il vecchio metodo risulta pesante
In una tipica applicazione React o Next.js, un semplice modulo "crea un progetto" innesca una serie di passaggi: un file di route API, una richiesta fetch dal browser, la gestione degli stati di caricamento ed errore, gli header CORS e, infine, un aggiornamento lato client per riflettere i nuovi dati. Ogni passaggio aggiunge file, righe di codice e potenziali punti di errore. I team passano tempo a collegare questi pezzi anche quando l'unico obiettivo è scrivere un record in un database.
Le Server Actions colmano il divario
Le Server Actions sono funzioni asincrone che sono garantite di essere eseguite solo sul server. L'aggiunta della direttiva "use server" in cima a un file indica al compilatore di escludere il codice dal bundle del browser, in modo che possa accedere in sicurezza a database, segreti o qualsiasi risorsa esclusivamente lato server. Poiché la funzione risiede sul server, il componente può invocarla direttamente tramite l'attributo action su un elemento <form> nativo.
Definire un'azione
export async function createProject(formData: FormData) {
const title = formData.get('title') as string;
if (!title) throw new Error('Title is required');
await db.project.create({
data: { title }
});
revalidatePath('/dashboard');
}
La funzione riceve un oggetto FormData, valida il payload, scrive nel database e poi chiede a Next.js di aggiornare la pagina /dashboard in modo che l'interfaccia utente mostri il nuovo progetto senza un ricaricamento completo.
Collegarla all'interfaccia utente
export default function NewProjectForm() {
return (
<form action={createProject}>
<input type="text" name="title" required />
<SubmitButton />
</form>
);
}
Quando l'utente clicca sul pulsante di invio, il browser invia i dati del modulo alla funzione createProject lato server. Poiché questo utilizza il comportamento standard dei moduli HTML, l'invio funziona anche se JavaScript non è ancora stato caricato, migliorando le prestazioni percepite su connessioni lente.
Cosa guadagnano i team
- Meno file – Nessun file
pages/apioapp/apiseparato per ogni endpoint. - Meno collegamenti – Nessuna chiamata
fetchmanuale, nessuna gestione esplicita di CORS. - Sicurezza dei tipi integrata – La firma della funzione è condivisa tra server e client, quindi TypeScript può rilevare tempestivamente eventuali discrepanze.
- Vantaggio in termini di prestazioni – La richiesta viaggia direttamente verso la funzione server, evitando un salto di rete extra che una chiamata fetch lato client introdurrebbe.
Limiti e precauzioni
Le Server Actions sono ancora una funzionalità nelle fasi iniziali. Possono essere solo funzioni asincrone contrassegnate con "use server" e non possono restituire oggetti JavaScript arbitrari al client; devono terminare con un redirect, una revalidation o una risposta semplice. Il debugging può sembrare diverso perché lo stack di chiamate passa dal browser al runtime del server, il che potrebbe sorprendere gli sviluppatori abituati ai classici log delle route API. Inoltre, i flussi di lavoro complessi che coinvolgono più microservizi o che richiedono codici di stato HTTP granulari potrebbero ancora richiedere un tradizionale endpoint API.
Cosa monitorare
È probabile che Next.js espanda l'API delle Server Actions nei prossimi rilasci, aggiungendo il supporto per altri tipi di risposta e una migliore integrazione con gli strumenti di sviluppo. Gli utenti che adottano la tecnologia precocemente dovrebbero tenere d'occhio il changelog del framework e il feedback della community per valutarne la stabilità prima di affidare funzionalità mission-critical a questo approccio. Monitorare la dimensione del bundle e le metriche di rendering lato server può anche rivelare se la riduzione del codice client si traduce in guadagni misurabili di latenza per i pattern di traffico specifici.
In sintesi
Consentendo a un componente di chiamare direttamente una funzione esclusivamente lato server, le Server Actions di Next.js eliminano l'intermediario che ha a lungo appesantito i progetti React. Il risultato è un codice più pulito, tempi di risposta più rapidi e un'esperienza di sviluppo più fluida, a patto che i vincoli attuali della funzionalità siano in linea con le esigenze del progetto.
