Skip to content

Учебный frontend-проект "Место", портированный на "React"

Notifications You must be signed in to change notification settings

elrouss/mesto-react

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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

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

* - проект прошел обязательное код-ревью

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

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

3. Установка и запуск приложения в локальном репозитории

  1. git clone https://github.com/elrouss/mesto-react.git - клонировать репозиторий (с использованием HTTPS) на свое устройство
  2. npm i - установить зависимости
  3. npm run start - запустить приложение в режиме разработчика (в браузере ввести ссылку http://localhost:3000/, если приложение не открылось там автоматически)

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

Работа разделена на 2 этапа:

  1. Портирование HTML-разметки, CSS-стилей, реализация открытия и закрытия 5 модальных окон (EditProfilePopup, EditAvatarPopup, AddPlacePopup, ConfirmCardDeletionPopup, ImagePopup), загрузка данных с сервера
  2. Написание функционала с передачей данных на сервер (см.: п. 5)

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

  1. Удаление карточки в окне подтверждения

Решение: при реализации окна подтверждения удаления карточки сделовало учесть прокидывание _id конкретно открытой карточки, в противном случае либо не работала функция удаления, либо предпринималась попытка удаления всех карточек в галерее (неудачная в связи с контролем сервера). Для этого был создан стейт activeCardId, в который записывается _id открываемой карточки и соответственно используется в функции ее удаления

  1. Пустые элементы верстки и "дерганье" в процессе отрисовки после получения данных с сервера

Решение: для скрытия страницы до ответа с сервера и вставки их в верстку добавлено окно-заглушка

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

Решение: для валидации форм написана логика, которая проверяет в компонентах сохраняемые в стейтах данные, вводимые пользователем в инпутах (url, длина слова). Далее в зависимости от установленных правил отдельная функция проверяет, можно ли считать форму валидной или нет, и пробрасывает булево значение через пропс в родительский компонент PopupWithForm. Там в свою очередь стилизуется и блокируется/активируется кнопка того или иного дочернего компонента формы. Кроме того, во избежание передачи url-ов, которые могли бы случайно начинаться с пустого пробела (следовательно, вызывать ошибку при сабмите), и двойных пробелов при отправке данных на сервер методом trim обрезаются лишние пробелы по краям строки, а регулярным выражением убираются все неодинарные пробелы

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

Решение: блокировать кнопку

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

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

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

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

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

About

Учебный frontend-проект "Место", портированный на "React"

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published