Hrvatski

Istražite React Server Actions, moćnu značajku za rukovanje podacima obrazaca i mutacijama podataka izravno na poslužitelju, pojednostavljujući razvoj u Reactu i povećavajući sigurnost.

React Server Actions: Pojednostavljena obrada obrazaca na strani poslužitelja

React Server Actions, predstavljene u Reactu 18 i značajno poboljšane u Next.js-u, nude revolucionaran pristup rukovanju podacima obrazaca i mutacijama podataka izravno na poslužitelju. Ova moćna značajka pojednostavljuje proces razvoja, povećava sigurnost i poboljšava performanse u usporedbi s tradicionalnim dohvaćanjem i manipulacijom podataka na strani klijenta.

Što su React Server Actions?

Server Actions su asinkrone funkcije koje se izvršavaju na poslužitelju i mogu se pozvati izravno iz React komponenata. Omogućuju vam obavljanje zadataka na strani poslužitelja, kao što su:

Ključna prednost Server Actions je u tome što vam omogućuju pisanje koda na strani poslužitelja unutar vaših React komponenata, eliminirajući potrebu za odvojenim API rutama i složenom logikom dohvaćanja podataka na strani klijenta. Ovo su-lociranje korisničkog sučelja i logike na strani poslužitelja dovodi do održivije i učinkovitije baze koda.

Prednosti korištenja React Server Actions

Korištenje React Server Actions pruža nekoliko značajnih prednosti:

Pojednostavljeni razvoj

Server Actions smanjuju količinu ponavljajućeg koda (boilerplate) omogućujući vam rukovanje podacima obrazaca i mutacijama podataka izravno unutar vaših React komponenata. To eliminira potrebu za odvojenim API krajnjim točkama i složenom logikom dohvaćanja podataka na strani klijenta, pojednostavljujući proces razvoja i čineći vaš kod lakšim za razumijevanje i održavanje. Uzmimo za primjer jednostavan kontaktni obrazac. Bez Server Actions, trebali biste odvojenu API rutu za obradu obrasca, JavaScript na strani klijenta za slanje podataka i logiku za rukovanje pogreškama i na klijentu i na poslužitelju. Sa Server Actions, sve se to može riješiti unutar same komponente.

Poboljšana sigurnost

Izvršavanjem koda na poslužitelju, Server Actions smanjuju površinu napada vaše aplikacije. Osjetljivi podaci i poslovna logika čuvaju se podalje od klijenta, sprječavajući zlonamjerne korisnike da ih mijenjaju. Na primjer, vjerodajnice za bazu podataka ili API ključevi nikada se ne izlažu u kodu na strani klijenta. Sve interakcije s bazom podataka odvijaju se na poslužitelju, čime se smanjuje rizik od SQL injekcije ili neovlaštenog pristupa podacima.

Poboljšane performanse

Server Actions mogu poboljšati performanse smanjenjem količine JavaScripta koji se treba preuzeti i izvršiti na klijentu. To je posebno korisno za korisnike na uređajima slabijih performansi ili s sporom internetskom vezom. Obrada podataka događa se na poslužitelju, a klijentu se šalju samo potrebna ažuriranja korisničkog sučelja, što rezultira bržim učitavanjem stranica i fluidnijim korisničkim iskustvom.

Optimistična ažuriranja

Server Actions se besprijekorno integriraju s Reactovim Suspense i Transitions, omogućujući optimistična ažuriranja. Optimistična ažuriranja omogućuju vam da odmah ažurirate korisničko sučelje, čak i prije nego što je poslužitelj potvrdio radnju. To pruža responzivnije i privlačnije korisničko iskustvo, jer korisnici ne moraju čekati odgovor poslužitelja da bi vidjeli rezultate svojih akcija. U e-trgovini, dodavanje artikla u košaricu može se odmah prikazati dok poslužitelj u pozadini potvrđuje dodavanje.

Progresivno poboljšanje

Server Actions podržavaju progresivno poboljšanje (progressive enhancement), što znači da vaša aplikacija može funkcionirati čak i ako je JavaScript onemogućen ili se ne uspije učitati. Kada je JavaScript onemogućen, obrasci će se slati kao tradicionalni HTML obrasci, a poslužitelj će obraditi podnošenje i preusmjeriti korisnika na novu stranicu. To osigurava da vaša aplikacija ostaje dostupna svim korisnicima, bez obzira na konfiguraciju njihovog preglednika ili mrežne uvjete. To je posebno važno za pristupačnost i SEO.

Kako koristiti React Server Actions

Da biste koristili React Server Actions, trebate koristiti framework koji ih podržava, kao što je Next.js. Slijedi vodič korak po korak:

1. Definirajte Server Action

Stvorite asinkronu funkciju koja će se izvršavati na poslužitelju. Ova funkcija treba rukovati logikom koju želite izvršiti na poslužitelju, kao što je ažuriranje baze podataka ili pozivanje API-ja. Označite funkciju direktivom "use server" na vrhu kako biste naznačili da je to Server Action. Ova direktiva govori React kompajleru da tretira funkciju kao funkciju na strani poslužitelja i da automatski rukuje serijalizacijom i deserijalizacijom podataka između klijenta i poslužitelja.

// 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('/'); // Očisti predmemoriju rute
    return { message: 'Poruka uspješno spremljena!' };
  } catch (e) {
    return { message: 'Spremanje poruke nije uspjelo' };
  }
}

Objašnjenje:

2. Uvezite i koristite Server Action u svojoj komponenti

Uvezite Server Action u svoju React komponentu i koristite je kao `action` svojstvo na elementu obrasca. `useFormState` hook može se koristiti za upravljanje stanjem obrasca i prikaz povratnih informacija korisniku.

// 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 (
    
{state?.message &&

{state.message}

}
); }

Objašnjenje:

3. Rukovanje podacima obrasca

Unutar Server Action, možete pristupiti podacima obrasca pomoću `FormData` API-ja. Ovaj API pruža praktičan način za pristup vrijednostima polja obrasca.

'use server'

export async function createMessage(prevState, formData) {
  const message = formData.get('message');

  // ...
}

4. Rukovanje pogreškama

Koristite `try...catch` blokove za rukovanje pogreškama koje se mogu pojaviti tijekom izvršavanja Server Action. Vratite poruku o pogrešci u objektu stanja kako biste je prikazali korisniku.

'use server'

export async function createMessage(prevState, formData) {
  const message = formData.get('message');

  try {
    // ...
  } catch (e) {
    return { message: 'Spremanje poruke nije uspjelo' };
  }
}

5. Ponovno validiranje podataka

Nakon što je Server Action uspješno mutirao podatke, možda ćete trebati ponovno validirati predmemoriju podataka kako biste osigurali da korisničko sučelje odražava najnovije promjene. Koristite funkcije `revalidatePath` ili `revalidateTag` iz `next/cache` za ponovno validiranje određenih staza ili oznaka.

'use server'

import { revalidatePath } from 'next/cache';

export async function createMessage(prevState, formData) {
  // ...
  revalidatePath('/'); // Očisti predmemoriju rute
  // ...
}

Napredna upotreba

Mutiranje podataka

Server Actions su posebno pogodne za mutiranje podataka, kao što je ažuriranje baza podataka ili vanjskih API-ja. Možete koristiti Server Actions za rukovanje složenim mutacijama podataka koje zahtijevaju logiku na strani poslužitelja, kao što je validacija podataka, izvođenje izračuna ili interakcija s više izvora podataka. Razmotrite scenarij u kojem trebate ažurirati korisnički profil i poslati potvrdni e-mail. Server Action može obraditi i ažuriranje baze podataka i proces slanja e-pošte u jednoj, atomskoj operaciji.

Autentifikacija i autorizacija

Server Actions se mogu koristiti za rukovanje autentifikacijom i autorizacijom. Obavljanjem provjera autentifikacije i autorizacije na poslužitelju, možete osigurati da samo ovlašteni korisnici imaju pristup osjetljivim podacima i funkcionalnostima. Možete koristiti Server Actions za rukovanje prijavama korisnika, registracijom i poništavanjem lozinke. Na primjer, Server Action može provjeriti korisničke vjerodajnice u bazi podataka i vratiti token koji se može koristiti za autentifikaciju kasnijih zahtjeva.

Rubne funkcije (Edge Functions)

Server Actions se mogu postaviti kao rubne funkcije (Edge Functions), koje se izvršavaju na globalnoj mreži poslužitelja blizu vaših korisnika. To može značajno smanjiti latenciju i poboljšati performanse, posebno za korisnike na geografski raspršenim lokacijama. Rubne funkcije su idealne za rukovanje Server Actions koje zahtijevaju nisku latenciju, kao što su ažuriranja podataka u stvarnom vremenu ili isporuka personaliziranog sadržaja. Next.js pruža ugrađenu podršku za postavljanje Server Actions kao rubnih funkcija.

Strujanje (Streaming)

Server Actions podržavaju strujanje (streaming), što vam omogućuje slanje podataka klijentu u dijelovima kako postaju dostupni. To može poboljšati percipirane performanse vaše aplikacije, posebno za Server Actions kojima je potrebno dugo vrijeme za izvršavanje. Strujanje je posebno korisno za rukovanje velikim skupovima podataka ili složenim izračunima. Na primjer, možete strujati rezultate pretraživanja klijentu kako se dohvaćaju iz baze podataka, pružajući responzivnije korisničko iskustvo.

Najbolje prakse

Ovo su neke od najboljih praksi koje treba slijediti pri korištenju React Server Actions:

Primjeri iz stvarnog svijeta

Pogledajmo neke primjere iz stvarnog svijeta o tome kako se React Server Actions mogu koristiti u različitim vrstama aplikacija:

Aplikacija za e-trgovinu

Aplikacija za društvene mreže

Sustav za upravljanje sadržajem (CMS)

Razmatranja o internacionalizaciji

Pri razvoju aplikacija za globalnu publiku, ključno je uzeti u obzir internacionalizaciju (i18n) i lokalizaciju (l10n). Evo nekoliko razmatranja za korištenje React Server Actions u internacionaliziranim aplikacijama:

Na primjer, pri obradi obrasca koji zahtijeva unos datuma, Server Action može koristiti `Intl.DateTimeFormat` API za parsiranje datuma prema lokalnim postavkama korisnika, osiguravajući da se datum ispravno interpretira bez obzira na regionalne postavke korisnika.

Zaključak

React Server Actions su moćan alat za pojednostavljivanje obrade obrazaca na strani poslužitelja i mutacija podataka u React aplikacijama. Omogućavajući vam pisanje koda na strani poslužitelja izravno unutar vaših React komponenata, Server Actions smanjuju količinu ponavljajućeg koda, povećavaju sigurnost, poboljšavaju performanse i omogućuju optimistična ažuriranja. Slijedeći najbolje prakse navedene u ovom vodiču, možete iskoristiti Server Actions za izgradnju robusnijih, skalabilnijih i održivijih React aplikacija. Kako se React nastavlja razvijati, Server Actions će nedvojbeno igrati sve važniju ulogu u budućnosti web razvoja.