Список продавцов в Redux

На прошлых занятиях мы закончили с основным материалом. Теперь с помощью thunk мы получаем список продуктов с сервера и можем сохранить на сервере новый продукт. Давайте разберемся с продавцами. Ведь мы получаем данные и для них. Давайте сделаем отдельную страничку со списком продавцов.

Откроем наше приложение с продуктами, а в нем папку sellers. Создадим в этой папке файл SellersList.jsx. Здесь мы будем использовать useSelector, Link и selectAllSellers, код которого мы напишем в sellersSlice.js чуть позже:

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

Далее создадим сам SellersList. В нем мы получим всех продавцов с помощью хука useSelector, затем получим верстку для списка продавцов в цикле map, причем каждое название продавца у нас будет вести на его страничку. И в конце вернем верстку с заголовком и полученным списком:

export 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 создадим в самом конце файла два селектора после экспорта редьюсера:

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

Теперь нам необходимо прописать маршрут для странички со списком, для этого откроем файл App.jsx и в массив дочерних маршрутов children добавим еще один объект (не забудьте импортировать компонент SellersList):

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

Чтобы наша ссылка 'Sellers' в меню заработала, давайте зайдем в файл root.jsx (как давно это было ... ) и заменим тег a на элемент NavLink:

<NavLink to="/sellers" end> Sellers </NavLink>

И последнее. Чтобы в нашей менюшке выделялась активная ссылка, и было понятно на какой страничке мы находимся, мы добавим стиль в index.css:

nav a.active { color: purple; }

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

Откройте ваше приложение со студентами. Изучив материалы урока, в папке teachers создайте файл TeachersList.jsx. С помощью этого компонента вы будете выводить список преподавателей. Импортируйте в него необходимые компоненты и хуки.

Напишите код для компонента TeachersList, получите в нем всех преподавателей и сделайте список преподавателей teachersToRender, пусть в каждой строчке этого списка отображаются их фамилии и инициалы, а в скобочках предмет, который они ведут. Пусть каждые ФИО вместе будут ссылкой, которая ведет на отдельную страничку для каждого преподавателя. Затем в конце кода компонента верните верстку с заголовком и созданным списком.

В конце файла teachersSlice.js создайте пару функций-селекторов selectAllTeachers и selectTeacherById, как показано в уроке.

В App.jsx подключите еще один дочерний маршрут для странички с преподавателями.

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



Чат с GPT Компилятор