Memuat Ulang Halaman
Termasuk bagian Dasar-Dasar Next.js dalam perjalanan React di Coddy. Pelajaran 32 dari 47.
Selama dua pelajaran, kamu hidup dengan kebohongan. Kirim formulirnya, dan item memang tersimpan, tetapi layar tidak berubah. Muat ulang halaman, dan item itu muncul.
Alasannya persis seperti yang membuat Server Components cepat. Halaman membaca datanya sekali, di server, dan yang tersimpan di browser adalah hasil akhirnya. Aksimu mengubah data di baliknya. Tidak ada yang memberi tahu halaman itu.
Perbaikannya hanya satu baris, di akhir action:
'use server';
import { revalidatePath } from 'next/cache';
import { saveTask } from '../lib/db';
export async function addTask(formData) {
saveTask(formData.get('title'));
revalidatePath('/');
}revalidatePath('/') membuang cache Next.js untuk rute tersebut dan merendernya kembali (di server, dengan data terbaru), lalu mengganti konten halaman dengan hasil yang baru. Tanpa memuat ulang, tanpa indikator pemuatan, tanpa state.
Argumennya adalah rute yang akan dirender ulang, ditulis seperti yang muncul di URL: '/' untuk halaman beranda, '/tasks' untuk halaman tugas. Arahkan ke path yang salah dan tidak ada perubahan yang terlihat: bug klasik "aksiku berfungsi, tetapi daftarnya sudah usang".
Terkadang, kamu tidak ingin tetap berada di tempat yang sama. Untuk “simpan, lalu pindah ke tempat lain”, Server Action bisa diakhiri dengan redirect():
import { redirect } from 'next/navigation';
export async function createPost(formData) {
const id = savePost(formData.get('title'));
redirect(`/posts/${id}`);
}Import yang sama seperti yang kamu gunakan di halaman. Gunakan revalidatePath saat pengguna tetap berada di halaman, dan redirect saat mereka berpindah.
Tantangan
MudahaddTask menyimpan dengan benar, tetapi daftar di layar tidak pernah diperbarui. Perbaiki.
- Di
app/actions.js, imporrevalidatePathdari'next/cache'. - Panggil dengan rute beranda,
'/', setelah tugas disimpan.
Tidak ada yang perlu diubah di app/page.jsx: ini perbaikan satu impor dan satu baris.
Coba sendiri
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar Next.js
2Routing dan Tautan
Folder Menjadi RuteRute BertingkatMenautkan HalamanRute DinamisHalaman Tidak DitemukanRekap: Routing3Tata Letak dan Metadata
Tata Letak UtamaNavigasi BersamaTata Letak BersarangMetadata HalamanMetadata DinamisUlasan: Tata Letak6Server Actions
Apa Itu Server ActionFormulir yang BertindakMembaca Data FormulirMemuat Ulang HalamanRingkasan: Server Actions