Cara mengemas kini fetch dan useLoaderData() menggunakan react-router
P粉883223328
P粉883223328 2023-08-26 12:39:34
0
1
476
<p>Saya ingin mengemas kini data useLoaderData() selepas menyerahkan borang. Dalam kes saya: </p> <pre class="brush:php;toolbar:false;">eksport const countriesLoader = async () => const res = tunggu ambil("https://restcountries.com/v3.1/all/"); jika (!res.ok) { throw Error("Tidak dapat mengakses data!"); } return res.json(); };</pre> <p><kod><Elemen indeks laluan={<CoutriesList />} loader={countriesLoader} /></code></p> <p>Dalam elemen CountriesList: </p> <p><kod>const country= useLoaderData();</code></p> <p>Saya mahu mengemas kini negara dengan data baharu dalam useLoaderData(): </p> <pre class="brush:php;toolbar:false;">const findCountry = async () => const res = tunggu ambil( `https://restcountries.com/v3.1/name/${searchText}` ); data const = res.json(); mengembalikan data; };</pre> <p>Jadi apabila saya menyerahkan, saya mahu data negaraLoader menjadi data findCountry. </p> <p>Adakah terdapat sebarang penyelesaian? Terima kasih</p>
P粉883223328
P粉883223328

membalas semua(1)
P粉373990857

Saya rasa anda mungkin mahu menggunakan findCountry sebagai tindakan penghalaan semasa menyerahkan borang. Pemuat dijalankan pada kali pertama laluan dimuatkan. Satu tindakan boleh dijadualkan kemudian.

Contoh asas:

const router = createBrowserRouter([
  {
    index: true,
    element: <CountriesList />,
    loader: countriesLoader,
    action: findCountry
  }
]);

<RouterProvider router={router} />
const countriesLoader = async () => {
  const res = await fetch("https://restcountries.com/v3.1/all/");
  if (!res.ok) {
    throw Error("无法获取数据!");
  }
  return res.json();
};
const findCountry = async ({ request }) => {
  const formData = await request.formData();

  const res = await fetch(
    `https://restcountries.com/v3.1/name/${formData.get("country")}`
  );
  if (!res.ok) {
    throw Error("无法获取数据!");
  }
  return res.json();
};
import {
  Form,
  useActionData,
  useLoaderData
} from "react-router-dom";

const CountriesList = () => {
  const searchResult = useActionData();
  const countriesData = useLoaderData();

  return (
    <>
      ...

      <Form method="post" replace>
        <label>
          搜索 <input required type="text" name="country" />
        </label>
        <button type="submit">创建</button>
      </Form>

      ...
    </>
  );
};

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan