Спіс прадаўцоў у Redux

На мінулых занятках мы скончылі з асноўным матэрыялам. Цяпер з дапамогай thunk мы атрымліваем спіс прадуктаў з сервера і можам захаваць на серверы новы прадукт. Давайце разбярэмся з прадаўцамі. Бо мы атрымліваем даныя і для іх. Давайце зробім асобную староначку са спісам прадаўцоў.

Адкрыем наша прыкладанне з прадуктамі, а ў ім папку sellers. Стварым у гэтай папцы файл SellersList.jsx. Тут мы будзем выкарыстоўваць useSelector, Link і selectAllSellers, код якога мы напішам у sellersSlice.js крыху пазней:

sellers/SellersList.jsximport { useSelector } from 'react-redux'
import { Link } from 'react-router-dom'
import { selectAllSellers } from './sellersSlice'

Далей створым сам SellersList. У ім мы атрымаем усіх прадаўцоў з дапамогай хука useSelector, затым атрымаем верстку для спісу прадаўцоў у цыкле map, прычым кожная назва прадаўца ў нас будзе весці на яго староначку. І ў канцы вернем верстку з загалоўкам і атрыманым спісам:

sellers/SellersList.jsxexport const SellersList = () => {
  const sellers = useSelector(selectAllSellers)
  const sellersToRender = sellers.map((seller) => (
    <li key={seller.id}>
      <Link to={`/sellers/${seller.id}`}>{seller.name}</Link>
    </li>
  ))

  return (
    <div>
      <h2>Sellers:</h2>

      <ul>{sellersToRender}</ul>
    </div>
  )
}

Затым зайдзем у файл sellersSlice.js і па аналогіі з селектарамі ў productsSlice.js створым у самым канцы файла два селектары пасля экспарту рэдьюсера:

sellers/sellersSlice.jsexport const selectAllSellers = (state) => state.sellers

export const selectSellerById = (state, sellerId) =>
state.sellers.find((seller) => seller.id === sellerId)

Цяпер нам неабходна прапісаць маршрут для старонкі са спісам, для гэтага адкрыем файл App.jsx і ў масіў даччыных маршрутаў children дадамо яшчэ адзін аб'ект (не забудзьцеся імпартаваць кампанент SellersList):

App.jsx{
  path: '/sellers',
  element: <SellersList />,
},

Каб нашая спасылка 'Sellers' у меню запрацавала, давайце зайдзем у файл root.jsx (як даўно гэта было ... ) і замянім тэг a на элемент NavLink:

app/root.jsx<NavLink to="/sellers" end>
  Sellers
</NavLink>

І апошняе. Каб у нашай менюшцы вылучалася актыўная спасылка, і было зразумела на якой староначцы мы знаходзімся, мы дадамо стыль у index.css:

index.cssnav a.active {
  color: purple;
}

Запусцім наша прыкладанне. Цяпер мы можам зайсці на староначку з прадаўцамі, клікнуўшы па 'Sellers' у меню. Раней, вядома, трэба клікнуць па 'Products' у меню, інакш нашы прадукты не падгрузяцца. На наступным уроке мы зробім староначку для кожнага прадаўца і на гэтым скончым вывучэнне дадзенага падручніка па Redux.

Задание 1

Адкрыйце ваша прыкладанне са студэнтамі. Вывучыўшы матэрыялы ўрока, у папцы teachers стварыце файл TeachersList.jsx. З дапамогай гэтага кампанента вы будзеце выводзіць спіс выкладчыкаў. Імпартуйце ў яго неабходныя кампаненты і хукі.

Задание 2

Напішыце код для кампанента TeachersList, атрымайце ў ім усіх выкладчыкаў і зрабіце спіс выкладчыкаў teachersToRender, хай у кожным радку гэтага спісу адлюстроўваюцца іх прозвішчы і ініцыялы, а ў дужках прадмет, які яны вядуць. Хай кожныя ПІБ разам будуць спасылкай, якая вядзе на асобную старонку для кожнага выкладчыка. Затым у канцы кода кампанента вярніце верстку з загалоўкам і створаным спісам.

Задание 3

У канцы файла teachersSlice.js стварыце пару функцый-селектараў selectAllTeachers і selectTeacherById, як паказана ў уроку.

Задание 4

У App.jsx падключыце яшчэ адзін даччыны маршрут для староначкі з выкладчыкамі.

Задание 5

У файле root.jsx у меню для 'Teachers' замяніце тэг a на NavLink, як паказана ў уроку. Зрабіце так, каб актыўная спасылка ў меню як-небудзь вылучалася, дадаўшы для гэтага стылі ў index.css.