So aktualisieren Sie fetch und useLoaderData() mit React-Router
P粉883223328
P粉883223328 2023-08-26 12:39:34
0
1
414
<p>Ich möchte die Daten von useLoaderData() nach dem Absenden des Formulars aktualisieren. In meinem Fall: </p> <pre class="brush:php;toolbar:false;">export const statesLoader = async () => const res =wait fetch("https://restcountries.com/v3.1/all/"); if (!res.ok) { throw Error("Zugriff auf Daten nicht möglich!"); } return res.json(); };</pre> <p><code><Route index element={<CoutriesList />} loader={countriesLoader} /></code></p> <p>Im CountriesList-Element: </p> <p><code>const country= useLoaderData();</code></p> <p>Ich möchte Länder mit neuen Daten in useLoaderData() aktualisieren: </p> <pre class="brush:php;toolbar:false;">const findCountry = async () => const res = warte auf Abruf( `https://restcountries.com/v3.1/name/${searchText}` ); const data = res.json(); Rückgabedaten; };</pre> <p>Wenn ich also abschicke, möchte ich, dass die Daten von „countryLoader“ zu den Daten von „findCountry“ werden. </p> <p>Gibt es eine Lösung? Vielen Dank</p>
P粉883223328
P粉883223328

Antworte allen(1)
P粉373990857

我认为你可能想在提交表单时使用findCountry作为路由动作。加载器在第一次加载路由时运行。稍后可以调度一个动作。

基本示例:

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>

      ...
    </>
  );
};

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!