Preskúmajte React Server Actions, výkonnú funkciu na spracovanie formulárov a dátových mutácií priamo na serveri, ktorá zjednodušuje vývoj v Reacte a zvyšuje bezpečnosť.
React Server Actions: Zjednodušené spracovanie formulárov na strane servera
React Server Actions, predstavené v React 18 a výrazne vylepšené v Next.js, ponúkajú revolučný prístup k spracovaniu odosielaných formulárov a dátových mutácií priamo na serveri. Táto výkonná funkcia zjednodušuje proces vývoja, zvyšuje bezpečnosť a zlepšuje výkon v porovnaní s tradičným získavaním a manipuláciou dát na strane klienta.
Čo sú React Server Actions?
Server Actions sú asynchrónne funkcie, ktoré bežia na serveri a môžu byť volané priamo z React komponentov. Umožňujú vám vykonávať úlohy na strane servera, ako napríklad:
- Odosielanie formulárov: Bezpečné spracovanie dát z formulárov na serveri.
- Dátové mutácie: Aktualizácia databáz alebo externých API.
- Autentifikácia: Spracovanie prihlasovania a registrácie používateľov.
- Logika na strane servera: Vykonávanie komplexnej biznis logiky bez jej odhalenia klientovi.
Kľúčovou výhodou Server Actions je, že vám umožňujú písať kód na strane servera priamo vo vašich React komponentoch, čím eliminujú potrebu samostatných API ciest a zložitej logiky na získavanie dát na strane klienta. Toto umiestnenie UI a logiky na strane servera vedľa seba vedie k udržateľnejšej a efektívnejšej kódovej základni.
Výhody používania React Server Actions
Používanie React Server Actions poskytuje niekoľko významných výhod:
Zjednodušený vývoj
Server Actions redukujú množstvo stereotypného kódu (boilerplate) tým, že umožňujú spracovávať odoslané formuláre a dátové mutácie priamo vo vašich React komponentoch. Tým sa eliminuje potreba samostatných API koncových bodov a zložitej logiky na získavanie dát na strane klienta, čo zefektívňuje proces vývoja a robí váš kód ľahšie zrozumiteľným a udržiavateľným. Zoberme si jednoduchý kontaktný formulár. Bez Server Actions by ste potrebovali samostatnú API cestu na spracovanie odoslaného formulára, JavaScript na strane klienta na odoslanie dát a logiku na spracovanie chýb na strane klienta aj servera. S Server Actions sa toto všetko dá zvládnuť priamo v samotnom komponente.
Zvýšená bezpečnosť
Spúšťaním kódu na serveri Server Actions znižujú plochu možných útokov na vašu aplikáciu. Citlivé dáta a biznis logika sú držané mimo klienta, čo zabraňuje škodlivým používateľom v ich manipulácii. Napríklad, prihlasovacie údaje k databáze alebo API kľúče nie sú nikdy odhalené v kóde na strane klienta. Všetky interakcie s databázou prebiehajú na serveri, čím sa znižuje riziko SQL injection alebo neoprávneného prístupu k dátam.
Zlepšený výkon
Server Actions môžu zlepšiť výkon znížením množstva JavaScriptu, ktorý je potrebné stiahnuť a spustiť na strane klienta. To je obzvlášť výhodné pre používateľov na zariadeniach s nižším výkonom alebo s pomalým internetovým pripojením. Spracovanie dát prebieha na serveri a klientovi sa posielajú iba nevyhnutné aktualizácie UI, čo vedie k rýchlejšiemu načítaniu stránok a plynulejšiemu používateľskému zážitku.
Optimistické aktualizácie
Server Actions sa bezproblémovo integrujú s React Suspense a Transitions, čo umožňuje optimistické aktualizácie. Optimistické aktualizácie vám umožňujú okamžite aktualizovať UI, ešte predtým, ako server potvrdí akciu. To poskytuje responzívnejší a pútavejší používateľský zážitok, pretože používatelia nemusia čakať na odpoveď servera, aby videli výsledky svojich akcií. V e-commerce môže byť pridanie položky do nákupného košíka zobrazené okamžite, zatiaľ čo server na pozadí potvrdzuje pridanie.
Progresívne vylepšenie
Server Actions podporujú progresívne vylepšenie (progressive enhancement), čo znamená, že vaša aplikácia môže fungovať aj v prípade, že je JavaScript vypnutý alebo sa nenačíta. Keď je JavaScript vypnutý, formuláre sa odošlú ako tradičné HTML formuláre a server spracuje odoslanie a presmeruje používateľa na novú stránku. Tým sa zabezpečí, že vaša aplikácia zostane prístupná pre všetkých používateľov, bez ohľadu na konfiguráciu ich prehliadača alebo sieťové podmienky. Toto je obzvlášť dôležité pre prístupnosť a SEO.
Ako používať React Server Actions
Ak chcete používať React Server Actions, musíte používať framework, ktorý ich podporuje, napríklad Next.js. Tu je postup krok za krokom:
1. Definujte Server Action
Vytvorte asynchrónnu funkciu, ktorá sa spustí na serveri. Táto funkcia by mala obsahovať logiku, ktorú chcete vykonať na serveri, napríklad aktualizáciu databázy alebo volanie API. Označte funkciu direktívou `"use server"` na začiatku, aby ste naznačili, že ide o Server Action. Táto direktíva hovorí kompilátoru Reactu, aby zaobchádzal s funkciou ako s funkciou na strane servera a aby automaticky spracoval serializáciu a deserializáciu dát medzi klientom a serverom.
// app/actions.js
'use server'
import { revalidatePath } from 'next/cache';
import { saveMessage } from './db';
export async function createMessage(prevState, formData) {
const message = formData.get('message');
try {
await saveMessage(message);
revalidatePath('/'); // Vymaže cache pre cestu
return { message: 'Správa úspešne uložená!' };
} catch (e) {
return { message: 'Nepodarilo sa uložiť správu' };
}
}
Vysvetlenie:
- Direktíva `'use server'` označuje túto funkciu ako Server Action.
- `revalidatePath('/')` vymaže cache pre danú cestu, čím zabezpečí, že pri ďalšej požiadavke sa načítajú aktualizované dáta. Toto je kľúčové pre udržanie konzistencie dát.
- `saveMessage(message)` je zástupný symbol pre vašu skutočnú logiku interakcie s databázou. Predpokladá sa, že máte niekde definovanú funkciu `saveMessage` na ukladanie správy do databázy.
- Funkcia vracia stavový objekt, ktorý možno použiť na zobrazenie spätnej väzby používateľovi.
2. Importujte a použite Server Action vo vašom komponente
Importujte Server Action do vášho React komponentu a použite ju ako `action` prop na elemente formulára. Hook `useFormState` možno použiť na správu stavu formulára a zobrazenie spätnej väzby používateľovi.
// app/page.jsx
'use client';
import { useFormState } from 'react-dom';
import { createMessage } from './actions';
export default function Home() {
const [state, formAction] = useFormState(createMessage, {message: ''});
return (
);
}
Vysvetlenie:
- Direktíva `'use client'` špecifikuje, že ide o klientský komponent (keďže používa `useFormState`).
- `useFormState(createMessage, {message: ''})` inicializuje stav formulára s `createMessage` Server Action. Druhý argument je počiatočný stav.
- Prop `action` elementu `form` je nastavený na `formAction` vrátený z `useFormState`.
- Premenná `state` obsahuje návratovú hodnotu zo Server Action, ktorú možno použiť na zobrazenie spätnej väzby používateľovi.
3. Spracovanie dát z formulára
Vo vnútri Server Action môžete pristupovať k dátam z formulára pomocou `FormData` API. Toto API poskytuje pohodlný spôsob prístupu k hodnotám polí formulára.
'use server'
export async function createMessage(prevState, formData) {
const message = formData.get('message');
// ...
}
4. Spracovanie chýb
Použite bloky `try...catch` na spracovanie chýb, ktoré môžu nastať počas vykonávania Server Action. Vráťte chybovú správu v stavovom objekte, aby sa zobrazila používateľovi.
'use server'
export async function createMessage(prevState, formData) {
const message = formData.get('message');
try {
// ...
} catch (e) {
return { message: 'Nepodarilo sa uložiť správu' };
}
}
5. Revalidácia dát
Po úspešnej mutácii dát pomocou Server Action môže byť potrebné revalidovať dátovú cache, aby sa zabezpečilo, že UI odráža najnovšie zmeny. Použite funkcie `revalidatePath` alebo `revalidateTag` z `next/cache` na revalidáciu špecifických ciest alebo značiek.
'use server'
import { revalidatePath } from 'next/cache';
export async function createMessage(prevState, formData) {
// ...
revalidatePath('/'); // Vymaže cache pre cestu
// ...
}
Pokročilé použitie
Mutácia dát
Server Actions sú obzvlášť vhodné na mutáciu dát, ako je aktualizácia databáz alebo externých API. Môžete použiť Server Actions na spracovanie zložitých dátových mutácií, ktoré vyžadujú logiku na strane servera, ako je validácia dát, vykonávanie výpočtov alebo interakcia s viacerými zdrojmi dát. Zoberme si scenár, kde potrebujete aktualizovať profil používateľa a poslať potvrdzovací e-mail. Server Action dokáže zvládnuť aktualizáciu databázy aj proces odoslania e-mailu v jedinej atomickej operácii.
Autentifikácia a autorizácia
Server Actions môžu byť použité na spracovanie autentifikácie a autorizácie. Vykonávaním kontrol autentifikácie a autorizácie na serveri môžete zabezpečiť, že prístup k citlivým dátam a funkcionalite majú iba oprávnení používatelia. Môžete použiť Server Actions na spracovanie prihlasovania používateľov, registrácie a resetovania hesla. Napríklad Server Action môže overiť prihlasovacie údaje používateľa v databáze a vrátiť token, ktorý sa dá použiť na autentifikáciu nasledujúcich požiadaviek.
Edge funkcie
Server Actions môžu byť nasadené ako Edge funkcie, ktoré bežia na globálnej sieti serverov blízko vašich používateľov. To môže výrazne znížiť latenciu a zlepšiť výkon, najmä pre používateľov v geograficky rozptýlených lokalitách. Edge funkcie sú ideálne na spracovanie Server Actions, ktoré vyžadujú nízku latenciu, ako sú aktualizácie dát v reálnom čase alebo doručovanie personalizovaného obsahu. Next.js poskytuje vstavanú podporu pre nasadenie Server Actions ako Edge funkcií.
Streaming
Server Actions podporujú streaming, ktorý vám umožňuje posielať dáta klientovi po častiach, ako sú dostupné. To môže zlepšiť vnímaný výkon vašej aplikácie, najmä pre Server Actions, ktorých vykonanie trvá dlho. Streaming je obzvlášť užitočný na spracovanie veľkých dátových súborov alebo zložitých výpočtov. Napríklad môžete streamovať výsledky vyhľadávania klientovi, ako sú získavané z databázy, čím poskytnete responzívnejší používateľský zážitok.
Najlepšie postupy
Tu sú niektoré najlepšie postupy, ktoré treba dodržiavať pri používaní React Server Actions:
- Udržujte Server Actions malé a zamerané: Každá Server Action by mala vykonávať jednu, dobre definovanú úlohu. To robí váš kód ľahšie zrozumiteľným, testovateľným a udržiavateľným.
- Používajte popisné názvy: Vyberajte názvy, ktoré jasne naznačujú účel Server Action. Napríklad `createComment` alebo `updateUserProfile` sú lepšie ako všeobecné názvy ako `processData`.
- Validujte dáta na serveri: Vždy validujte dáta na serveri, aby ste zabránili škodlivým používateľom vkladať neplatné dáta do vašej aplikácie. To zahŕňa validáciu dátových typov, formátov a rozsahov.
- Spracovávajte chyby elegantne: Používajte bloky `try...catch` na spracovanie chýb a poskytujte používateľovi informatívne chybové správy. Vyhnite sa odhaľovaniu citlivých informácií o chybách klientovi.
- Používajte optimistické aktualizácie: Poskytnite responzívnejší používateľský zážitok okamžitou aktualizáciou UI, ešte predtým, ako server potvrdí akciu.
- Revalidujte dáta podľa potreby: Zabezpečte, aby UI odrážalo najnovšie zmeny revalidáciou dátovej cache po tom, ako Server Action zmutovala dáta.
Príklady z reálneho sveta
Pozrime sa na niekoľko príkladov z reálneho sveta, ako môžu byť React Server Actions použité v rôznych typoch aplikácií:
E-commerce aplikácia
- Pridanie položky do nákupného košíka: Server Action môže spracovať pridanie položky do nákupného košíka používateľa a aktualizovať celkovú sumu v košíku v databáze. Optimistické aktualizácie môžu byť použité na okamžité zobrazenie položky v košíku.
- Spracovanie platby: Server Action môže spracovať platbu pomocou platobnej brány tretej strany. Server Action môže tiež aktualizovať stav objednávky v databáze a poslať používateľovi potvrdzovací e-mail.
- Odoslanie recenzie produktu: Server Action môže spracovať odoslanie recenzie produktu a uložiť ju do databázy. Server Action môže tiež vypočítať priemerné hodnotenie produktu a aktualizovať stránku s detailmi produktu.
Aplikácia sociálnych médií
- Zverejnenie nového tweetu: Server Action môže spracovať zverejnenie nového tweetu a uložiť ho do databázy. Server Action môže tiež aktualizovať časovú os používateľa a upozorniť jeho sledovateľov.
- Páčenie sa príspevku: Server Action môže spracovať „lajknutie“ príspevku a aktualizovať počet „lajkov“ v databáze. Optimistické aktualizácie môžu byť použité na okamžité zobrazenie aktualizovaného počtu „lajkov“.
- Sledovanie používateľa: Server Action môže spracovať sledovanie používateľa a aktualizovať počty sledovateľov a sledovaných v databáze.
Systém na správu obsahu (CMS)
- Vytvorenie nového blogového príspevku: Server Action môže spracovať vytvorenie nového blogového príspevku a uložiť ho do databázy. Server Action môže tiež vygenerovať slug pre príspevok a aktualizovať sitemapu.
- Aktualizácia stránky: Server Action môže spracovať aktualizáciu stránky a uložiť ju do databázy. Server Action môže tiež revalidovať cache stránky, aby sa zabezpečilo, že aktualizovaný obsah sa zobrazí používateľom.
- Zverejnenie zmeny: Server Action môže spracovať zverejnenie zmeny do databázy a upozorniť všetkých odberateľov.
Aspekty internacionalizácie
Pri vývoji aplikácií pre globálne publikum je nevyhnutné zvážiť internacionalizáciu (i18n) a lokalizáciu (l10n). Tu sú niektoré aspekty používania React Server Actions v internacionalizovaných aplikáciách:
- Spracovanie rôznych formátov dátumu a času: Použite `Intl` API na formátovanie dátumov a časov podľa lokality používateľa.
- Spracovanie rôznych formátov čísel: Použite `Intl` API na formátovanie čísel podľa lokality používateľa.
- Spracovanie rôznych mien: Použite `Intl` API na formátovanie mien podľa lokality používateľa.
- Prekladanie chybových správ: Preložte chybové správy do jazyka používateľa.
- Podpora jazykov sprava doľava (RTL): Zabezpečte, aby vaša aplikácia podporovala RTL jazyky, ako sú arabčina a hebrejčina.
Napríklad pri spracovaní formulára, ktorý vyžaduje zadanie dátumu, môže Server Action použiť `Intl.DateTimeFormat` API na parsovanie dátumu podľa lokality používateľa, čím sa zabezpečí, že dátum bude správne interpretovaný bez ohľadu na regionálne nastavenia používateľa.
Záver
React Server Actions sú výkonným nástrojom na zjednodušenie spracovania formulárov na strane servera a dátových mutácií v React aplikáciách. Tým, že vám umožňujú písať kód na strane servera priamo vo vašich React komponentoch, Server Actions redukujú stereotypný kód, zvyšujú bezpečnosť, zlepšujú výkon a umožňujú optimistické aktualizácie. Dodržiavaním najlepších postupov uvedených v tejto príručke môžete využiť Server Actions na budovanie robustnejších, škálovateľnejších a udržiavateľnejších React aplikácií. Ako sa React ďalej vyvíja, Server Actions budú nepochybne zohrávať čoraz dôležitejšiu úlohu v budúcnosti webového vývoja.