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

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

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

{"blocks": [{"key": "895lo", "data": {}, "text": "Перенести оставшиеся страницы на NextJs:", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}, {"key": "4in5c", "data": {}, "text": "", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}, {"key": "2g2i4", "data": {}, "text": "1. Перенести стили из css в styled-components", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}, {"key": "cpb90", "data": {}, "text": "2. Пофикстить Typescript ошибки", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}, {"key": "co2br", "data": {}, "text": "3. Пофиксить подключение к firebase", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}, {"key": "bn5qu", "data": {}, "text": "", "type": "unstyled", "depth": 0, "entityRanges": [], "inlineStyleRanges": []}], "entityMap": {}}

Решил вообщем по старому сценарию самостоятельно переписывать за тобой, так как просто смотреть не очень получается тогда уловить суть всех изменений в этот раз сложней повторять, потому-что ты часто возвращаешься и переписываешь свой код, но так вроде все равно более понятно становится. Первый комит: https://github.com/p1aton/prisma-nextjs/commit/5415c3948a964478baa5a8358fcad3db7b957257

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

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

Про этот дженерик говорил: & Omit<Pokemon, 'abilities' | 'stats' | 'base_experience' | 'height'> Объясни пожалуйста, как он работает и вообще в каких случаях мы должны использовать дженерики. Возможно в прошлом видео ты объеснял, но все не получается запомнить по видео, через текст проще, всегда можно вернуться посмотреть.

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

Поправил две страницы PokemonCard+Home Коммит: https://github.com/p1aton/prisma-nextjs/commit/6e9b9914544583722f19a085e290e295f82131f6

<< & 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 Отлично!