Mengembalikan JSX daripada Tindakan Pelayan React

王林
Lepaskan: 2024-08-31 06:34:37
asal
640 orang telah melayarinya

Tahukah anda bahawa Next.js Server Actions boleh mengembalikan penanda JSX dan bukannya data JSON mentah?

Walaupun ia tidak disebut secara jelas dalam dokumen, saya terkejut kerana ia berfungsi.

Contoh

Saya mempunyai halaman yang memaparkan senarai pengguna dengan tindakan pelayan:

export default function Page() {
  async function loadUsersAction() {
    "use server";

    return [
      { name: "John", age: 30 },
      { name: "Jane", age: 25 },
      { name: "Doe", age: 40 },
    ];
  }

  return <UsersList loadUsersAction={loadUsersAction} />;
}
Salin selepas log masuk

Komponen Senarai Pengguna memuatkan pengguna dengan klik butang:

export default function UsersList({ loadUsersAction }) {
  const [users, setUsers] = useState();

  const onClick = async () => {
    const data = await loadUsersAction();
    setUsers(data);
  };

  return (
    <>
      <button onClick={onClick}>Load users</button>
      <ul>
        {users?.map((user) => (
          <li key={user.name}>
            {user.name} - {user.age}
          </li>
        ))}
      </ul>
    </>
  );
}
Salin selepas log masuk

Demo:

Returning JSX from React Server Actions

Sekarang saya menukar tindakan pelayan untuk mengembalikan JSX dengan pengguna yang diberikan:

async function loadUsersAction() {
  "use server";

  const users = [
    { name: "John", age: 30 },
    { name: "Jane", age: 25 },
    { name: "Doe", age: 40 },
  ];

  return (
    <ul>
      {users?.map((user) => (
        <li key={user.name}>
          {user.name} - {user.age}
        </li>
      ))}
    </ul>
  );
}
Salin selepas log masuk

Dan dalam komponen UsersList cuma tunjukkan tindak balas tindakan pelayan:

export default function UsersList({ loadUsersAction }) {
  const [users, setUsers] = useState();

  const onClick = async () => {
    const data = await loadUsersAction();
    setUsers(data);
  };

  return (
    <>
      <button onClick={onClick}>Load users</button>
      {users}
    </>
  );
}
Salin selepas log masuk

Dalam penyemak imbas semuanya berfungsi dengan cara yang sama!

Nota tentang pengendalian ralat

Bagaimana jika tindakan pelayan menimbulkan ralat? Apabila ia mengembalikan data JSON, kita boleh menangkap ralat itu dalam tindakan dan mengembalikannya dalam format sendiri seperti:

{ error: "my error" }
Salin selepas log masuk

Apabila mengembalikan JSX, kami boleh membiarkan ralat membuang dan menangkapnya dengan sempadan ralat terdekat pada klien. Mengikut dokumen React, panggilan tindakan pelayan di luar komponen hendaklah dibalut ke dalam Peralihan untuk pengendalian ralat yang betul.
Kod akhir komponen UsersList:

export default function UsersList({ loadUsersAction }) {
  const [isPending, startTransition] = useTransition();
  const [users, setUsers] = useState();

  const onClick = () => {
    startTransition(async () => {
      const data = await loadUsersAction();
      setUsers(data);
    });
  };

  return (
    <>
      <button onClick={onClick}>Load users</button>
      {isPending ? <div>Loading users...</div> : users}
    </>
  );
}
Salin selepas log masuk

Selain itu, saya menggunakan bendera isPending untuk menunjukkan mesej semasa memuatkan pengguna.

Demo:
Returning JSX from React Server Actions

Semoga ia dapat membantu.
Terima kasih kerana membaca dan selamat mengekod! ❤️

Atas ialah kandungan terperinci Mengembalikan JSX daripada Tindakan Pelayan React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan