Перенести страницы и настроить роутинг 2

Выполняется
Планируемый запуск: 17.02.2021Дата начала: 17.02.2021Планируемое завершение: 21.02.2021Дата завершения:

Описание задачи

Перенести оставшиеся страницы на NextJs:

1. Перенести стили из css в styled-components
2. Пофикстить Typescript ошибки
3. Пофиксить подключение к firebase

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

Первый комит:

А очень часто приходится переписывать код, особенно когда не до конца понимаешь что делать. Я всегда говорил: "Главное - понять, что делать.".

Но ты не просто коммиты выкатывай, ты и спрашивай что не ясно. Наверняка же что-то не ясно.
Слушай, когда просто смотришь кажется, что многое не понимаешь, но когда начинаешь тоже писать уже становится более понятно, что делаешь. Но вопросы будут не переживай)
Про этот дженерик говорил:

& Omit<Pokemon, 'abilities' | 'stats' | 'base_experience' | 'height'>

Объясни пожалуйста, как он работает и вообще в каких случаях мы должны использовать дженерики.

Возможно в прошлом видео ты объеснял, но все не получается запомнить по видео, через текст проще, всегда можно вернуться посмотреть.
Еще объясни этот фрагмент, не совсем понял зачем вынесли пропсы в отдельную константу в одном месте мне кажется было удобней.


<< & Omit<Pokemon, 'abilities' | 'stats' | 'base_experience' | 'height'>
<< Объясни пожалуйста, как он работает

Вообще, в подобных случаях лучше сначала гуглить. Простой же запрос "Typescript дженерики". Как правило есть на хабре что-нить. Вот отличная статья: https://habr.com/ru/post/455473/
Там даже с гифками.

А в данном случае происходит следующее?

1. Omit<Pokemon, 'abilities' | 'stats' | 'base_experience' | 'height'>
Omit - это функция, исключающая из типы перечисленные свойства. Официальная документация https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys

То есть есть тип Pokemon, в котором перечислена куча свойств. Мне надо в другом компоненте перечислить свойства типа Pokemon, но вот только не все, а за исключением этих перечисленных.

2. Символ & - это сложение типов, то есть я к своему типу прибавляю еще и типы из покемона, за исключением перечисленных.

<< и вообще в каких случаях мы должны использовать дженерики.
Везде, где это уместно и полезно. И если здесь не использовать Omit, то пришлось бы перечислять все типы из покемона повторно. А если мы их используем в нескольких местах? А если потом в покемоне поменяются или добавятся/удалятся какие-то типы? БЕгать потом по проекту и актуализировать?

Omit - это тоже дженерик. Вообще, в TS, все, что имеет дополнительные параметры - это дженерики.

А вот бывают и гораздо более сложные дженерики. К примеру, вот здесь: src/hooks/useProcessorMutation/index.tsx

Здесь происходит целая магия. Это общий хук для всех запросов-процессоров (таких моих специализированных запросов, содержащих в ответах ошибки, если есть). Все ответы имеют общую структуру (success, message, errors, data), но все же отличаются, потому что data у каждых своя (User, Project, Task и т.п.), и разные входящие параметры. И вот задача был написать одну функцию, в которую можно передавать разные параметры, получать свои ответы и было понятно где что требуется и что будет возвращено. Вот какой результат в итоге:

Он понимает, какие параметры может и должен принимать:

И понимает что на выходе имеется:

Такие дела...
<< Еще объясни этот фрагмент, не совсем понял зачем вынесли пропсы в отдельную константу в одном месте мне кажется было удобней.

Я уже писал ранее: надо стараться придерживаться принципа "Одна сущность - один файл". Хотя бы по отношению к основным компонентам. Не удобно заходить в компонент и искать где же начинается его код (пропуская прочие сущности). Ты эти константы раз напишешь и забудешь, а вот код компонента может меняться часто.

<< Поправил две страницы PokemonCard+Home

Отлично!

Добавить комментарий