Работа принимается
- HTML, CSS, JS-файлы и изображения должны быть в папке src.
- Инфраструктурные файлы проекта созданы через CRA.
- Сборка, запуск и функциональность проекта выполняются без ошибок.
- Свёрстаны все необходимые элементы макета.
-
В проекте есть:
- файлы index.html, index.css и index.js;
- директория blocks;
- папка images с картинками;
- директория components с файлами App.js, Card.js, ImagePopup.js, PopupWithForm.js, Main.js, Header.js, Footer.js, AddPlacePopup.js, EditAvatarPopup.js, EditProfilePopup.js, Register.js, Login.js, ProtectedRoute.js, InfoTooltip.js;
- директория utils с файлом api.js;
- директория contexts с файлом CurrentUserContext.js;
- файл README.md;
- файл .gitignore.
- Стили портированы.
-
Кодстайл:
- имена переменных и функций должны быть написаны в camelCase;
- имена классов и функциональных компонентов — существительные с прописной буквы;
- имена переменных — существительные;
- имя функции отражает то, что она делает.
- транслит,
- неуместные сокращения.
Для именования запрещены:
- Объект контекста CurrentUserContext экспортируется из отдельного файла директории contexts.
-
Разметка портирована в JSX:
- Разметка заключена в ( );
- Разметка вынесена в соответствующие ей компоненты.
-
Локальное хранилище. Работа с jwt токеном выполнена в правильном порядке:
- при монтировании App описан эффект, проверяющий наличие токена и его валидности;
- при вызове обработчика onSignOut происходит удаление jwt;
- при вызове обработчика onLogin происходит сохранение jwt.
-
Регистрация и авторизация:
- Роут / защищён HOC-компонентом ProtectedRoute.
- При попытке перейти по роуту / происходит редирект на /signin.
- После успешной авторизации происходит редирект на /.
- Роут /signup и /signin не является защищёнными, т.е оборачивать их в HOC ProtectedRoute не нужно.
- После успешного вызова обработчика onSignOut происходит редирект на /signin.
- Корректно используется хук useHistory.
- Корректно используются компоненты <Switch />, <Route />, <Redirect />.
-
Компоненты:
- Хуки не используются внутри условных блоков.
- Хуки вызываются в основной функции компонента.
- При использовании классовых компонентов эффекты описаны внутри методов жизненного цикла компонента.
- Компоненты Main и Card подписаны на контекст CurrentUserContext.
- Выполнено поднятие стейта из компонента Main в App.
- В компонент App внедрён контекст через CurrentUserContext.Provider.
- В корневом компоненте App создана стейт-переменная currentUser. Она используется в качестве значения для провайдера контекста.
- Компоненты модальных окон содержат только обработчики сабмита формы. Остальные обработчики, например handleUpdateUser, описаны в компоненте App.
- Запросы к API описаны внутри компонента App.
- Обработчики onRegister(), onLogin(), и onSignOut() объявлены в Register.js, Login.js и Header.js соответственно, или объявлены в компоненте App и переданы в соответствующие компоненты.
- В компоненты добавлены новые стейт-переменные: email — в компонент App, email и password — в компоненты Login и Register.
- Запрос к API за информацией о пользователе и массиве карточек выполняется единожды, при монтировании.
- Все стейт-переменные из брифа созданы и определены внутри указанного в брифе компонента.
- Начальное состояние стейт-переменных содержит корректный тип данных.
-
Функциональность проекта сохранена:
- На странице отрисовывается информация о пользователе и карточке.
- Модальные окна открываются при нажатии на соответствующий элемент интерфейса.
- Модальные окна закрываются при нажатии на иконку закрытия.
- Работа модальных окон настроена: есть возможность редактировать аватар и профиль, добавлять новую карточку.
- В форму редактирования профиля подставляются текущие данные.
- Реализовано добавление/удаление лайка.
- Реализовано удаление собственной карточки.
- Все локальные значения корректно обновляются.
React
Работа отклоняется от проверки
- При сборке или запуске проекта возникают ошибки.
- Разметка не портирована в JSX.
- Часть функциональности не реализована: например, пользователя невозможно зарегистрировать, или не выполнено сохранение токена в локальное хранилище.
- Работа содержит вопросы или просьбы о помощи к ревьюеру.
- На повторных итерациях не исправлены критические замечания.