Александр
Давайте с простого) С чего начинается ревью кода?
Александр
Какая цель вообще у ревью кода?
Pavel
емм, проверить если качество кода нормальное?)
Александр
емм, проверить если качество кода нормальное?)
угу) Как насчет того, чтобы как раз с качества кода и начать?
Александр
Что вообще такое качество кода?
Александр
Я вот только недавно прогаю, как мне понять, что мой код качественный?
Pavel
читаемость, производительность и минимальное количество зависимостей, которые мешают расширять приложение?
Pavel
относятся к читаемости
Александр
отлично) По читаемости код сверху качественный?
Александр
относятся к читаемости
вообще нет на самом деле, ну да лдано)
Pavel
ну и могут мешать расширяемости тоже, если будет в нескольких местах написано по разному, скажем где-то с ошибкой, а где-то нет
honey
Если он ошибку в имени переменной сделает, у него же не будет работать
honey
Или будет не так работать
honey
Там инишлПродуктс кладётся в константу, а где используется?
honey
Зачем кладётся, если Н где не используется, и зачем тогда вообще функция
Александр
относятся к читаемости
По рзеузльаттам илссоевадний одонго анлигсйокго унвиертисета, не иеемт занчнеия, в каокм проякде рсапжоолены бкувы в солве. Галовне, чотбы преавя и пслонедяя бквуы блыи на мсете. осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиаетм кдаужю бкуву по отдльенотси, а все солво цлиеком. Так то читаемо))
Александр
Но работать не будет :DDD
Pavel
а, я пропустил слово в синтаксисе, думал про ошибки в наименованиях переменных)
Pavel
по читаемости более менее ок, не считая 2 похожих функций
Александр
ладно) Го по порядку) компонент описан правильно?
Александр
Декларация компонента)
Pavel
наверно да, если это правда тестовый компонент)
Александр
да не важно) Тестовый или боевой)
Александр
Тут как минимум 2 ошибки уже в описании компонента
Александр
В его декларации
Pavel
с большой буквы?
Александр
да, это первая) Если название типа элемента начинается с маленькой буквы, он ссылается на встроенный компонент, к примеру <div> или <span>, что в результате приведёт к тому, что в React.createElement будет передана строка 'div' или 'span'. Типы, начинающиеся с заглавной буквы, такие как <Foo />, компилируются в React.createElement(Foo) и соответствуют компоненту, который был объявлен или импортирован в вашем JavaScript-файле.
Александр
Все компоненты с большой буквы)
Александр
В целом без деталей - это прям в начале доки по реакту написано. Просто) Что все компоненты должны быть с большой буквы =)
Pavel
да, но это больше похоже на проверку внимательности 😄
Александр
А она так работает) Если знаешь, то найдешь)
Александр
Мы и не требуем, чтобы сразу все нашли. Естественно мы ведем собес и направляем)
Александр
Просто банальная просьба) Пройдись построчно и найди ошибки по коду построчно.
Александр
Без вникания в суть происходящего
Александр
Первая часть ревью - проверить, что код работает)
Александр
Вот вопрос) Оно сейчас будет работать?
Александр
https://codefile.io/f/KGkfL0W4L3ZOuUkbbuKW
Александр
Можешь поредактировать, если охота)
Pavel
не уверен, что initProducts в useState правильно написан, а с другой стороны вроде и правильно)
Александр
Поправь как считаешь нужным)
honey
Александр
Можешь удалить то, что считаешь не нужным) В рамках компонента свобода действий)
Александр
На собесе мы просим рассуждать в слух =) Чтобы понимать как мыслит кандидат) Тут с этим сложнее, ну да и ладно)
Pavel
кажется больше не вижу возможных проблем
Александр
они есть) Сейчас будет ошибка падать)
Александр
Что возвращает функциональный компонент?
Pavel
JSX
Александр
а сейчас он что возвращает?
Pavel
Promise?
Александр
угу)
Александр
Компоненты могут быть асинхронными?
Pavel
видимо нет :D
Александр
угу) Реакт умеет в JSX, но не умеет в промисы)
Александр
Это рендер функция и она должна jsx возвращать)
Pavel
смотрел несколько раз на этот async, думал никогда так не делал, выглядит странно)
Александр
да, там дибильный редактор кода -_-
Александр
А зачем тебе getProducts и setProducts в зависимостях?
Pavel
у меня бы линтер жаловался, привычка :D
Pavel
можно и без этого
Александр
линтер на такое не жалуется))
Александр
Ни в одном проекте так настроен не был, да и не к чему))
Pavel
у меня на проекте он жаловался :D причем правило какое-то тупое
Александр
Ок) Тогда для чего вообще нужны эти зависимости?
Александр
Что вообще такое эффект и как он работает?
Pavel
от них зависит вызов useEffect, если эти зависимости меняются, то он вызывается
Pavel
но в данном случае нет разницы, т.к. они не будут меняться
Александр
getProducts там точно не нужен, тк он вне компонента и реакт понятия не будет иметь, изменилась функция или нет)
honey
Нифига у вас тут диалог ;D
Pavel
окей, но изменение функций звучит как-то неправильно
Александр
Но в целом сейчас уже будет работать)
Pavel
даже не хочу предполагать, что в целом функция может измениться)
Александр
а можешь на async await переписать?
Александр
Чтобы не then был)
Александр
ну он тебе вечные варнинги писать будет)
Александр
useEffect синхронный
Александр
Ну всмысле, что на вход ему нужны синхронная функция)
Pavel
т.е. useEffect не особо поддерживает async await? или я не так написал?
Александр
https://ultimatecourses.com/blog/using-async-await-inside-react-use-effect-hook
Александр
А дело не в useeffecte)