Разбор тестового задания #2

Разбор тестового задания #2

Максим Пацианский

https://www.youtube.com/watch?v=EWaNgM4mv-A


План

  1. Что это такое?
  2. Кто я такой?
  3. Общие пожелания
  4. Общие ошибки
  5. Лучшие решения
  6. Все решения с отметками по времени + указание ошибок

Что это такое?

Это код-ревью решений второго тестового задания. В группе публикуются задачи, которые затем попадают на стенд контроля качества, где выявляются удачные и не удачные решения.

Кто я такой?

Меня зовут Максим Пацианский, у меня есть сообщество “Без воды” (vktelegram) и популярные книги по реакту на gitbook (2016й год, практика устарела, теория хорошая). Вы можете написать мне в телеграм (@maxfarseer) или на почту maxpfrontend@gmail.com

Консультирую по react с 2014 года. Стоимость 45$/час. Можно оплачивать на расчетный счет.

Бесплатно вам могут помочь (в том числе и я) на:

Общие пожелания

Проверьте, все ли зависимости добавлены корректно: удалите все node_modules, и выполните npm install / yarn install. Убедитесь, что проект работает.

Оформляйте демо на heroku (или подобные сервисы).

[TODO]: разобрать на вебинаре оформление демо.

Для тех, кто участвует не первый раз: присылайте задания с новым письмом, а не ответом на старое.


Общие проблемы

  • Плохое Readme;
  • Остаются eslint предупреждения, лишние console.log (redux-логгер не в счет);
  • Иконка Web не вынесен вперед (невнимательное чтение задачи);
  • Иконка Web выносится вперед в компоненте (а лучше бы в редьюсере, или экшене);
  • Пароль не очищается, если запрос вернулся с ошибкой;
  • Submit кнопка в форме логина доступна, если поля пустые (или одно из полей);
  • Submit кнопка в форме логина не поддерживает нажатие Enter;
  • Нет деления на компоненты/контейнеры (не относится к тем, кто делил по другим подходам);
  • URL-адрес для запросов на сервер полностью передается (нет оформления повторяющейся части строки в константу);
  • Ошибка/уведомление “неправильное имя пользователя/пароль” - не очищается;
  • Ошибка “неправильное имя пользователя/пароль” - выводится константой с сервера;
  • Текст ошибки “захардкожен” в коде. Нет обращения в словарик по константе с сервера;
  • Не удален “старый код”, то есть такой код, который нигде не используется;
  • Нет блока catch у промисов, нет обработки ошибок, если сервер отвечает не ok;
  • Компоненты размещены в node_modules;
  • Отсутствуют или недостаточно подробно описаны Prop Types.
  • Экшены и редьюсеры в куче в одном файле (или в одном все экшены, в другом все редьюсеры). Нет деления на “модули”, то есть каждой сущности - свои экшены и свои редьюсеры;

От автора:

Некоторые проекты у меня не работали, пока я не убирал redux dev tools. Подробностей не нашел, странно, что это касалось не всех проектов.


Лучшие решения

Решения идут в порядке, в котором были присланы.

Максим Сафин

Commit

Используется atomic-подход и styled components. Здесь без комментариев, так как нет большой экспертизы в данных вопросах.

Из письма:

Фронтенд разработкой занимаюсь 3 месяца. Скидываю так рано потому что нужно писать диплом и времени на задание больше нету. Не успел сделать валидацию, а стандартная HTML5 валидация не работает.


Ренат Рысаев

Commit

Из письма:

Сделал его часов за 5-6
Работаю фронтом уже полгода, до этого был верстальщиком

Евгений Санжиев

Commit

Из письма:

С React я познакомился полтора года назад, просто немного поигрался с ним (даже не понимал как работать с Redux) <cut /> Сейчас я работаю UI-разработчиком (занимаюсь в основном версткой) в компании Wrike.
Я делал его на выходных (сб, вс) по 4-5 ч в день.

Вениамин Трепачко

Commit

UI прекрасен.


Аладьин Александр

Commit

Используется подход с ducks, деление на страницы.

Из письма

Немного о себе: разработкой увлекся примерно 2 года назад (в 29 лет), сначала в качестве хобби <...> понял, что это может быть основным занятием и устроился на первую работу.
Теперь о самом задании: потратил где-то 10 дней по часу-полтора в день. Больше времени ушло на какие-то мелочи <...>.

Порошин Роман

Commit

Из письма

Опыт: JS - около года, React/Redux - 1-2 месяца.

Артем Бочков

Commit

Используется Semantic.UI, есть поддержка CI (continuous integration).


Все решения с отметками по времени

Здесь указаны только ошибки, и не отмечены хорошие моменты, которых великое множество, поэтому крайне рекомендую посмотреть все подряд.


6m00s - Артур Донковцев Commit

7m40s - опечатка в названии функции

8m07s - асинхронные запросы не вынесены в экшены


9m30s - Павел Пимкин Коммит

10m07s - все экшены в одном файле. Нет деления на модули.

10m25s - вынос иконки (перебор данных) сделан в компоненте. Лучше в редьюсере или экшене.


11m42s Сергей ZackFox Commit

12m28s - “прикольные” надписи. Лучше делать “нейтрально”, чтобы затем подобные задания можно было сразу посылать работодателю.

13m05s - лишний экшен, указывающий что “загрузка” завершилась. То есть вместо трех экшенов: REQUEST / SUCCESS / STOP, можно уложиться в два: REQUEST / SUCCESS.


16m16s - Дмитрий Петров Коммит

18m16s - использование var

18m34s - не вынесена часть URL адреса в константу


21m15s - Ефим Хлебный Коммит

21m17s - плохое сообщение в коммите

22m15s - одинаковые названия экшенов.


24m16s - Кацура Владислав Коммит

25m17s - (не ошибка) - данные приготовлены в редьюсере

27m38s - использование e.target, лучше e.currentTarget

28m20s - ==, а надо бы ===

28m33s - использование componentWillUnmount

29m00s (не ошибка) - рассуждение про “до серверную валидацию”.

30m05s - код не отфморатирован (на любителя)


30m33s - Максим Сафин Commit

31m35s - использование “не универсального” обработчика, там где это уместно.


32m02s - Сергей Regies Linkas Commit

33m42s - нет экшена для прелоадера

34m30s - порядок методов в компоненте ( ссылка на плагин )

35m30s - не существующий PropTypes


35m57s - Кононов Виталий Commit


38m02s - Ренат Рысаев Commit

39m45s - не делаем то, что не интересно


40m31s - Евгений Санжиев Commit

41m20s (не ошибка) - словарик для работы с ошибками


42m46s - Виталий Набережный Коммит

42m54s - не убраны тестовые данные


44m50s - Вениамин Трепачко Commit

Ачивка: очень классный дизайн.

47m42s - redux версия не полноценная.


47m57s - Ingvarr6 (Игорь) Commit

48m21s - нет 404 роута


51m20s - Екатерина Н Commit

51m30s - не очищается ошибка


54m48s - Роман Палесика Commit

55m30s - не хватает экшенов на загрузку/ошибку

56m49s - использование side-effects в редьюсере

58m10s - (не ошибка) вынос иконки web с помощью css (sick!)


58m53s - Умяр Юсупов Commit

59m15s - использование callback’a в setState, что приводит к лишней перерисовке. Лучше валидировать прямо в рендере.

61m01s - неуместное использование else if


62m13s - dsfcv d (boortcore) Commit


63m15s Константин Липский Commit

65m11s - в экшен передается URL целиком, лучше просто id передавать в данном варианте.


67m14s - Ikaow Ikaow Commit

67m50s - сложное условие в shouldComponentUpdate, можно проще (сразу проверить на props.data и все)

69m32s - e.preventDefault не первый в обработчике


70m01s - Ali Gasymov Commit


71m50s - Ахметанов Альберт Commit

72m20s - компоненты в node_modules

73m15s - дублирование обращений к переменным


74m04s - Женя Белый Commit

76m04s - privateRoute не вынесен в отдельный компонент

76m33s - сложный код для перемещения иконки web

76m56s - избыточное свойство loaded


77m35s - Аладьин Александр Commit

80m33s - ошибка не вынесена в словарик


81m19s - Misha Mihail Commit

81m43s - избыточное использование withRouter


83m04s - Dmitrii Shapovalenko Commit


84m00s - Даниил Commit

84m58s - избыточное деление экшенов

85m55s - ошибка в названии lifecycle-метода


86m58s - Порошин Роман Commit

87m15s - семантически неверное использование тэга article

90m46s - лишний вызов метода массива


91m10s - Артем Бочков Commit


Report Page