- Создать репозиторий(Публичный) на github
- Создать ветку с названием - lecture-1/hw
- Создать проект(используем vite - https://vitejs.dev/guide/#scaffolding-your-first-vite-project)
- Очистить проект
- Скопировать себе в проект мокковые данные(materials/mock.js в этом проекте)
- Отобразить все рестораны из моковых данных. Отображаем рестораны друг за другом. Логику отрисовку массивов не используем, отображаем каждый ресторан отдельно. Цель отработать работу с элементами.
- Название ресторана
- Заголовок - Меню (h3)
- Список названий блюд (используем тег ul и li)
- Заголовок - Отзывы (h3)
- Список текстов отзывов (используем тег ul и li)
- (Доп) сделать все это на React.createElement.
- Сделать коммит
- Запушить
- Открыть ПР из ветки с дз в ветку main
- Отправить ссылку на ПР в ветку дз 1 в Discord
-
Создать ветку с названием - lecture-2/hw
-
Создать компонент Layout с Header и Footer. Обернуть им список ресторанов;
-
Разбить рестораны на компоненты;
-
Применить способ отрисовки массивов.
-
Сделать коммит
-
Запушить
-
Открыть ПР из ветки с дз в ветку main
- Создать для ресторанов табы аналогичные тем, которые делали на лекции.
- Сохранять активный таб в localStorage, при обновлении страницы рисуем последний открытый ресторан
- В блюде сделать кнопки "-" и "+". Между ними рисуем цифру. По дефолту 0, минимальное значение 0, максимальное 5. По клику на + увеличиваем, по клику на - уменьшаем.
- Вынести логику каунтера в кастомный хук, подобно тому как в лекции.
- Стилизовать приложение, используем модули и помним про внешние/внутренние. Стилизуем на свой вкус
- Добавляем контекст темы. Кнопка переключения темы в шапке. По клику на кнопку все кнопки меняют тему(стили с дефолтных на альтернативные), а кнопка смены темы остается без изменений в стилях
- Добавляем контекст пользователя. В шапке делаем кнопку войти, по клику на кнопку добавляем в контекст мок-пользователя(просто имя любое). Если пользователь авторизован(есть в контексте имя), то кнопку войти меняем на имя пользователя и кнопку выйти, по клику на выйти убираем пользователя из контекста и снова рисуем кнопку войти. Кнопки +/- у блюда рисуются только для авторизованного пользователя.
- Установить библиотеки reduxToolkit и React-Redux
- Сконфигурировать стор
- Скопирать нормализованные мокковые данные (materials/normalized-mock.js в этом проекте)
- Создать 4 модуля(слайсами): рестораны, блюда, отзывы, юзеры
- Отобразить данные из стора в приложении(заменить старые данные на данные из стора)
- Скопировать директорию simple_api в корень проекта (materials/simple_api в этом проекте)
- Установить зависимости сервера(любым менеджером зависимостей внутри папки сервера)
- Скопировать в основной package.json команду start-server
- Запустить сервер
- Перейти с использование мокков на данные с сервера(загружать данные с сервера как делали на лекции)
- Добавить слайс корзины и подключить его к компоненту блюда
- Попробовать те приемы и хуки, которые разобрали на лекции в дз
- Посмотреть лекции про устройство редакса, классический редакс, продвинутый реакт(теория рендеринга, но ее можно начать смотреть, тк понадобится не к следующей лекции)
- Сделать страницу HomePage(контент на ваше усмотрение)
- Сделать страницу /restaurants. На ней рисуем табы ресторанов
- По клику на таб открываем подстраницу restaurants/:restaurantId с названием ресторана и двумя табами - меню и отзывы. Дефолтно открыт таб меню.
- По клику на табы меню, отзывы открываем подстраницу с меню или отзывами. restaurants/:restaurantId/menu и restaurants/:restaurantId/reviews
- По клику на блюдо открываем отдельную страницу блюда. На ней отображаем инфу о блюде и количество с кнопками. Страница блюда не является подстраницей ресторана. ее путь dish/:dishId
- Переделать получение данных на RTK Query
- ДОП. Добавить создание нового отзыва. Важно, чтобы при сохранении показывался лоадер на форме, после успешного сохранения она очищалась и выполнялся перезапрос отзывов ресторана