Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Учебный frontend-проект "Место", портированный на "React", c добавлением функции регистрации и авторизации пользователей

Notifications You must be signed in to change notification settings

elrouss/react-mesto-auth

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Учебный frontend-проект: "Место"

Оглавление
  1. Описание проекта
  2. Стек технологий
  3. Установка и запуск приложения в локальном репозитории, эксплуатация
  4. Процесс создания
  5. Функционал
  6. Планы по улучшению

1. Описание проекта

Данная проектная работа выполнена в рамках образовательной программы Яндекс Практикума. Проект представляет собой продолжение портирования на "React" адаптивного приложения (SPA) с профилем пользователя и фотокарточками, изначально написанного на нативных технологиях: HTML5, CSS3 и JavaScript. В сравнении с предыдущей работой в данном проекте добавлен функционал регистрации и авторизации пользователей на сайте в своем личном кабинете, а также исправлены некоторые ошибки, пропущенные ревьюером

* - проект прошел код-ревью

2. Стек технологий

Иконка React Иконка React Router Иконка CSS3 Иконка HTML5

3. Установка и запуск приложения в локальном репозитории, эксплуатация (пп. 4-5 актуальны также при работе на Github Pages)

  1. git clone https://github.com/elrouss/react-mesto-auth.git - клонировать репозиторий (с использованием HTTPS) на свое устройство
  2. npm i - установить зависимости
  3. npm run start - запустить приложение в режиме разработчика (в браузере ввести ссылку http://localhost:3000/react-mesto-auth/sign-in, если приложение не открылось там автоматически)
  4. При использовании приложения для входа в личный кабинет пользователю требуется зарегистрироваться (https://elrouss.github.io/react-mesto-auth/sign-up) и пройти авторизацию (https://elrouss.github.io/react-mesto-auth/sign-in). Можно воспользоваться уже зарегистрированным аккаунтом: email - test-acc@test.ru, пароль - test-acc@test.ru
  5. При авторизации в локальном хранилище сохраняется токен пользователя, который при закрытии вкладки с приложением и возвращении позволяет оставаться авторизованным на сайте. Он удаляется после нажатия на кнопку выхода из личного кабинета

NB! В связи с особенностями совместимости Github Pages с модулем маршрутизации (React Router DOM) в удаленном репозитории не рекомендуется обновление страниц приложения, имеющих добавочные эндпоинты к корневой ссылке /react-mesto-auth

NB!! На данном этапе не настроена отрисовка ошибок при попытке регистрации пользователя с ранее зарегистрированным электронным адресом, неправильном вводе электронного адреса и/или пароля и т.п. Эти ошибки можно проверить самостоятельно в консоли разработчика во вкладке «Network» (ответ с сервера будет выделен красным цветом)

4. Процесс создания

Работа выполнена в 1 этап:
Верстка дополнительных компонентов (стартовых окон с формами регистрации и авторизации пользователей) и элементов (гамбургер-меню, кнопка выхода из личного кабинета), написание функционала

4.1 Основные задачи, проблемы и их решение

  1. Вынос общих компонентов для нескольких страниц и перерисовка элементов

Решение: выделено 2 компонента - Header и WelcomeWindowWithForm. В первом из них для перерисовки элемента (ссылки на страницу авторизации/регистрации, кнопки выхода из личного кабинета, гамбургер-меню) написаны функции, которые отслеживают endpoint открытого у пользователя url, а также разрешение экрана. Второй компонент сделан по типу PopupWithForm, в который в свою очередь вставляются Register и Login

  1. Проблема отрисовки стартового окна с формой авторизации на несколько миллисекунд при обновлении страницы в личном кабинете

Решение: в компоненте App создан стейт-заглушка, ставящийся на этапе загрузки приложения, когда происходит проверка наличия токена и переадресация пользователю по нужному роуту

  1. Переписать код валидации форм под кастомный хук

Решение: в старом проекте в компонентах 3 модальных окон (EditAvatarPopup, EditProfilePopup, AddPlacePopup) была реализована собственноручно написанная валидация, которая получилась несколько громоздкой. С появлением 2 новых компонентов (Register и Login) составлен хук, примененный ко всем названным компонентам, который в итоге сделал код более читаемым, сократил его в 1,5 раза и сделал функцию валидации универсальной. Кроме того, в верстке и стилях переписан код отрисовки ошибок валидации (ранее - применялось абсолютное позиционирование, что некорректно отображало ошибки на мобильных разрешениях (с попаданием в фокус инпутов) и требовало высчитывание точек местоположения (top, left) для промежуточных разрешений

  1. В прошлой версии проекта при закрытии модального окна с фотографией карточки резко исчезал снимок и появлялся undefined

Решение: открытие и закрытие модального окна происходило только при наличии данных в передаваемом объекте (стейт selectedCard), появлявшихся и исчезавших во время клика по изображению карточки. Соответственно, закрытие окна начиналось только при очистке данных в объекте карточки (Object.keys(card).length !== 0, отсюда - undefined). В качестве решения этой проблемы был введен новый стейт isImagePopupOpened с булевым значением, который меняется при клике на карточку, что приводит к открытию и закрытию модального окна (объект карточки продолжает храниться в стейте selectedCard). Для очистки данных в модальном окне при закрытии во избежание "моргания" изображения при открытии модального окна другой карточки добавлен хук useEffect с методом setTimeout, который возвращает стейт selectedCard в исходное состояние сразу же после завершения анимации плавного закрытия модального окна

5. Функционал

Адаптивный интерфейс (в т. ч. новых компонентов и элементов) Гиф с демонстрацией адаптивного интерфейса приложения
Регистрация и авторизация пользователей Гиф с демонстрацией регистрации и авторизации пользователей
Редактирование данных пользователя Гиф с демонстрацией редактирования данных пользователя в личном кабинете
Обновление аватара Гиф с демонстрацией обновления аватара пользователя
Добавление новой карточки Гиф с демонстрацией добавления новой карточки
Добавление и снятие лайка (включая счетчик лайков) Гиф с демонстрацией добавления и снятия лайка (включая счетчик лайков)
Удаление карточки с модальным окном подтверждения действия Гиф с демонстрацией удаления карточки
Модальное окно успешной/неудачной регистрации на сайте Гиф с демонстрацией модального окна успешной/неудачной регистрации на сайте
Модальное окно с увеличенной фотографией карточки Гиф с демонстрацией модального окна с увеличенной фотографией карточки
Открытие и закрытие модальных окон (по кнопке, оверлею и клавише "Escape") Гиф с демонстрацией открытия и закрытия модального окна
Спиннеры загрузки Гиф с демонстрацией спиннера загрузки на примере модального окна с обновлением аватара
Валидация форм Гиф с демонстрацией валидации формы на примере модального окна с обновлением аватара
Окно предварительной загрузки страницы Гиф с демонстрацией окна предварительной загрузки страницы
Страница 404 (не будет видна на Github Pages)

* - жирным курсивом выделен дополнительный функционал, не входящий в обязательный перечень требований для получения зачета по проектной работе

6. Планы по улучшению

  • Оптимизация лишних ререндеров
  • Вывод в модальном окне после неудачной попытки регистрации/авторизации текста ошибок ("Пользователь с таким электронным адресом уже зарегистрирован", "Неправильный электронный адрес/пароль" и проч.)
  • Исправление зависания анимации при открытии/закрытии бургерного меню на iPhone
  • Оптимизация приложения для людей с ограниченными возможностями (напр., label для инпутов форм)
  • Добавление автоматического обновления галереи карточек
  • Добавление функции сабмита форм нажатием на клавишу "Enter" (в настоящий момент работает только в случае клика пользоватем по полю формы)

About

Учебный frontend-проект "Место", портированный на "React", c добавлением функции регистрации и авторизации пользователей

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.