Next.js pozwala teraz programistom wywoływać funkcje dostępne tylko na serwerze bezpośrednio z komponentu, eliminując potrzebę tworzenia osobnych tras API dla codziennych zadań, takich jak przesyłanie formularzy. Dzięki nowej funkcji Server Actions, pojedynczy formularz HTML może wyzwolić kod backendowy bez pośredniego wywołania fetch, co redukuje ilość kodu boilerplate i uszczelnia kontrakt między frontendem a backendem.
Dlaczego stary sposób wydaje się uciążliwy
W typowej aplikacji React lub Next.js prosty formularz „utwórz projekt” uruchamia łańcuch kroków: plik trasy API, żądanie fetch z przeglądarki, obsługa stanów ładowania i błędów, nagłówki CORS i na końcu aktualizacja po stronie klienta, aby odzwierciedlić nowe dane. Każdy krok dodaje pliki, linie kodu i punkty awarii. Zespoły poświęcają czas na łączenie tych elementów, nawet gdy jedynym celem jest zapisanie rekordu w bazie danych.
Server Actions niwelują te różnice
Server Actions to funkcje asynchroniczne, które gwarantowane są do uruchamiania wyłącznie na serwerze. Dodanie dyrektywy "use server" na górze pliku informuje kompilator, aby nie dołączał tego kodu do paczki (bundle) przeglądarki, dzięki czemu może on bezpiecznie uzyskać dostęp do baz danych, sekretów lub wszelkich zasobów dostępnych tylko na serwerze. Ponieważ funkcja znajduje się na serwerze, komponent może wywołać ją bezpośrednio za pomocą atrybutu action na natywnym elemencie <form>.
Definiowanie akcji
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');
}
Funkcja otrzymuje obiekt FormData, waliduje dane (payload), zapisuje je w bazie danych, a następnie prosi Next.js o odświeżenie strony /dashboard, aby interfejs użytkownika (UI) pokazał nowy projekt bez pełnego przeładowania strony.
Podpięcie w interfejsie użytkownika (UI)
export default function NewProjectForm() {
return (
<form action={createProject}>
<input type="text" name="title" required />
<SubmitButton />
</form>
);
}
Gdy użytkownik kliknie przycisk zatwierdzenia, przeglądarka wysyła dane formularza do funkcji createProject po stronie serwera. Ponieważ wykorzystuje to standardowe zachowanie formularza HTML, przesłanie danych działa nawet wtedy, gdy JavaScript jeszcze się nie załadował, co poprawia postrzeganą wydajność na wolnych połączeniach.
Co zyskują zespoły
- Mniej plików – Brak osobnych plików
pages/apilubapp/apidla każdego punktu końcowego (endpointu). - Mniej łączenia elementów – Brak ręcznych wywołań
fetch, brak jawnej obsługi CORS. - Wbudowane bezpieczeństwo typów – Sygnatura funkcji jest współdzielona między serwerem a klientem, dzięki czemu TypeScript może wcześnie wykryć niezgodności.
- Przewaga wydajnościowa – Żądanie trafia bezpośrednio do funkcji serwerowej, omijając dodatkowy skok sieciowy, który wprowadziłoby wywołanie fetch po stronie klienta.
Ograniczenia i środki ostrożności
Server Actions to wciąż wczesna funkcja. Mogą to być wyłącznie funkcje asynchroniczne oznaczone dyrektywą "use server" i nie mogą one zwracać dowolnych obiektów JavaScript do klienta; muszą kończyć się przekierowaniem, rewalidacją lub zwykłą odpowiedzią. Debugowanie może sprawiać wrażenie innego, ponieważ stos wywołań (call stack) przeskakuje z przeglądarki do środowiska uruchomieniowego serwera, co może zaskoczyć programistów przyzwyczajonych do klasycznych logów z tras API. Ponadto złożone przepływy pracy, które angażują wiele mikroserwisów lub wymagają precyzyjnych kodów statusu HTTP, mogą nadal wymagać tradycyjnego punktu końcowego API.
Na co zwrócić uwagę
Next.js prawdopodobnie rozszerzy API Server Actions w nadchodzących wydaniach, dodając obsługę większej liczby typów odpowiedzi i lepszą integrację z narzędziami. Wcześni użytkownicy powinni śledzić dziennik zmian (changelog) frameworka oraz opinie społeczności, aby ocenić stabilność przed przeniesieniem na tę ścieżkę funkcji krytycznych dla działania projektu. Monitorowanie rozmiaru paczki oraz metryk renderowania po stronie serwera może również ujawnić, czy zredukowany kod klienta przekłada się na wymierne zyski w opóźnieniach dla konkretnych wzorców ruchu.
Podsumowanie
Pozwalając komponentowi na bezpośrednie wywoływanie funkcji dostępnej tylko na serwerze, Next.js Server Actions usuwają pośrednika, który od dawna zaśmiecał projekty React. Rezultatem jest czystszy kod, szybsze cykle komunikacji i płynniejsze doświadczenie programisty — pod warunkiem, że obecne ograniczenia tej funkcji są zgodne z potrzebami projektu.
