Tuoteselain Reduxissa

Edellisellä tunnilla teimme erillisen sivun tuotteelle. Nyt meidän on tehtävä niin, että kun painamme mitä tahansa painiketta, sivumme ilmestyy selaimessa.

Aluksi kiinnitetään sille osoite, jossa se näytetään. Avataan tiedosto App.jsx, jossa määrittelemme reitit, ja lisätään children:een vielä yksi lapsireitti (älä unohda tuoda ProductPage.jsx). Määritetään polku ja komponentti, joka nostetaan esiin:

App.jsx{
  path: '/products/:productId',
  element: <ProductPage />,
},

Avataan nyt ProductsList.jsx kansiossa products ja muutetaan koodia hieman dispProducts:lle. Nyt meillä on erillinen sivu, jossa on täydelliset tiedot jokaisesta tuotteesta. Tämä tarkoittaa, että tuotelistassa näytämme vain tuotteen nimen ja lyhennetyn kuvauksen. Lisäämme myös linkin navigointielementin muodossa Link reitittimen kirjastosta, jota napsauttamalla pääsee tuotesivulle. Lisätään myös div:lle luokka product-excerpt erottamaan tuotteet toisistaan. Nyt dispProducts:n koodimme on tällainen:

products/ProductsList.jsxconst dispProducts = products.map((product) => (
  <div key={product.id} className="product-excerpt">
    <h3>{product.name}</h3>
    <p>{product.desc.substring(0, 100)}</p>
    <Link to={`/products/${product.id}`} className="link-btn">
      view
    </Link>
  </div>
))

Tuodaan Link:

products/ProductsList.jsximport { Link } from 'react-router-dom'

Ja lisätään tyylejä luokille link-btn ja product-excerpt tiedostoon index.css:

index.css.product-excerpt {
  margin-top: 30px;
  border: 1px solid gray;
  border-radius: 5px;
  padding: 10px;
}

.link-btn {
  border: 1.5px solid gray;
  border-radius: 10px;
  background-color: coral;
  color: black;
  padding: 1px 12px 1px 12px;
}

Lopuksi tehdään myös vasemmassa valikossa olevasta linkistä, joka johtaa tuotelistasivulle, toimiva, jotta pääsemme sinne mistä tahansa muusta paikasta. Avataan root.jsx ja korvataan tämä koodirivi:

app/root.jsx<a>Products</a>

Seuraavalla:

app/root.jsx<NavLink to="/products" end>
  Products
</NavLink>

Älä myöskään unohda tuoda NavLink React-reitittimen kirjastosta:

app/root.jsximport { Outlet, NavLink } from 'react-router-dom'

Käynnistetään sovelluksemme. Nyt voimme päästä minkä tahansa tuotteen tiedoille napsauttamalla katselupainiketta. Yritä nyt lisätä uusi tuote ja katsoa sen tietoja erillisellä sivulla napsauttamalla katselupainiketta. Myös nyt, palataksesi tuotelistaan riittää, että napsautat 'Products' vasemmassa valikossa. Ollessasi eri sivuilla, katso miten selaimen osoiterivillä oleva URL muuttuu.

Задание 1

Avaa opiskelijasovelluksesi. Tiedostossa App.jsx luo vielä yhden lapsireitin opiskelijasivulle.

Задание 2

Tiedostossa StudentsList.jsx tee koodiin muutoksia dispStudents:lle, kuten oppitunnilla on esitetty.

Задание 3

Tee niin, että linkki 'Students' vasemmassa valikossa johtaa opiskelijalista-sivulle. Tarkista, että kaikki toimii.

Задание 4

Katso miten selaimen osoiterivillä oleva arvo muuttuu riippuen siitä, millä sivulla olet parhaillaan.