Reitin luominen tietojen muokkaamiseen React Routerissa

Edellisellä oppitunnilla loimme lomakkeen muokkaamista varten erillisessä React komponentissa EditProduct.

Luodaan nyt loader-funktio uudelle reitille heti importtien jälkeen ja ennen funktiota EditProduct. Se on samanlainen kuin tiedostossa product.jsx. Funktiolle välitetään URL-parametrit ja sitten haemme tuotteen sen id:n perusteella:

routes/edit.jsxexport async function loader({ params }) {
  const product = await getProduct(params.productId);
  return { product };
}

Importoidaan getProduct tiedostosta forStorage.js:

routes/edit.jsximport { getProduct } from '../forStorage';

Avataan nyt main.jsx ja importoidaan luomamme komponentti EditProduct ja loader:

main.jsximport EditProduct, { loader as editProductLoader } from './routes/edit';

Lisätään sitten children -taulukkoon reittiolio muokkausta varten heti tuotereitin jälkeen:

main.jsxchildren: [
  {
    path: 'products/:productId',
    element: <Product />,
    loader: productLoader,
  },
  {
    path: 'products/:productId/edit',
    element: <EditProduct />,
    loader: editProductLoader,
  },
],

Käynnistetään nyt sovellus, luodaan tuote, klikataan sitä, ja sitten muokkauspainiketta ja näemme lomakkeemme.

Ainoa, meidän on vielä tehtävä niin, että lomakkeen kentissä muokkausta edeltävästi ovat nykyiset tiedot. Tätä varten importoidaan tiedostoon edit.jsx hook useLoaderData:

routes/edit.jsximport { Form, useLoaderData } from 'react-router-dom';

Ja käytetään sitä saamaan loaderin data funktiossa EditProduct. Lisätään se ennen komentoa return:

routes/edit.jsxconst { product } = useLoaderData();

Lisätään nyt jokaiselle input-tagille attribuutti defaultValue vastaavilla arvoilla jokaiselle inputille. Esimerkiksi, ensimmäinen input näyttää nyt tältä:

routes/edit.jsx<input
  placeholder="name"
  type="text"
  name="name"
  defaultValue={product.name}
/>

Kahdelle jäljelle jäävälle inputille arvot ovat vastaavasti 'product.cost' ja 'product.amount'. Tosiaan toistaiseksi datasta lomakkeessa meillä ei ole.

Задание 1

Ota edellisten oppituntien tehtävissä luomasi sovellus. Hyödynnä oppitunnin materiaaleja luodaksesi funktion loader tiedostoon edit.jsx opiskelijan tietojen muokkausreittiä varten.

Задание 2

Lisää children-taulukkoon reittiolio muokkausta varten.

Задание 3

Lisää funktiolle EditStudent oppitunnilla vaadittu koodi.