Почему я использую инлайн типизацию React компонентов

  Рет қаралды 2,753

Евгений Паромов | Front-end

Евгений Паромов | Front-end

Күн бұрын

Понимаю что это выгладит непривычно. Но просто попробуйте написать так пару компонентов, может вам понравится
Почему FC выпилили из create-react-app: github.com/fac...
Подписывайтесь на мой telegram канал:
t.me/cleanfron...

Пікірлер: 25
@jamesull
@jamesull Жыл бұрын
Тоже занимался такими изысканиями, но всё же пришёл к выводу, что мне визуально приятнее вынести интерфейс компонента куда-то вверх или вообще в отдельный файл, если типы модульные. Вдобавок, если у нас всякие экстенды появляются, в инлайн типизации начинает мозолить глаза наращивание скобочек
@webDever
@webDever Жыл бұрын
Мне тоже нравится то что делаешь крутой очень опыт, крутая информация, очень полезно, интересно послушать человека со своим подходом. На счёт рефакторинга, можно выделить название компонента, нажать shift+Ctrl+l , это выделит всё вхождения по файлу и ввести нужный, так мы не забудем ничего поменять, не нужно в ручную искать.
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
Спасибо! супер контент! делишься опытом реальной разработки, интересные видео!
@izzy7541
@izzy7541 Жыл бұрын
Странно что вы в видео утверждаете что как-то делать "Плохо". Это не плохо, а по другому, всё сказанное в видео просто дело соглашений и код-стайла в проете. Настраивается 2-3 правилами линта. Типы отдельным объектом всё же удобней выносить, так как они почти всегда будут иметь составные части, обёртки, дженерики. Зачем это всё мешать в разметку? Банально приятней читать когда: контракт -> реализация Экспортировать типы из компонентов отвечающих за бизнес логику не надо, по этому просто называйте их Props. Это именно то название которому они соответствуют. В ui компонентах тоже не надо называть ComponentProps, сделайте файл для ре-экспорта и там экспортируйте только то что вам надо и с какими надо именами. Например export type {Props as ButtonProps} from './button'. (о public API можно узнать в FSD архитектуре). Про типизиацию пропсов согласен, не надо никаких FC и писать тип возвращаемого значение тоже не стоит, тайпскрипт сам прекрасно выведет этот тип.
@BOCbMOU
@BOCbMOU Жыл бұрын
Со всем согласен, но хотелось бы ещё добавить, что при создании нового компонента ненадо каждый раз всё писать с нуля, поскольку можно использовать соответствующий сниппет (самому написать под кодстайл проекта). А там уже неважно сколько "лишнего" кода будет.
@RamaRama-qv3jo
@RamaRama-qv3jo Жыл бұрын
Коротко и интересные мысли!
@paemox
@paemox Жыл бұрын
Тоже встраиваю типы, но прописываю возвращаемое значение что бы сразу видеть ошибку, а не в момент использования.
@krowker
@krowker Жыл бұрын
Привет, Евгений! Спасибо за видео. Мне, начинающему разрабу, очень полезны твои видео. В команде я один на фронтенде и это первая моя работа. Так что стараюсь не упускать такие видео, где поясняют как лучше писать код. Как раз сейчас решил с нового проекта использовать TS. Поясни пожалуйста подробнее об экспорте. Ты упомянул, что экспорт по дефолту ты не рекомендуешь. Хотя без него сложно обойтись если используешь Suspense компонент для ленивой загрузки.
@adamburke4496
@adamburke4496 Жыл бұрын
Для ленивой загрузки JS модулей не обойтись без экспорта по умолчанию. Но обычно это делается для модулей, которые являются "страницами". Во всех остальных случаях, лучше использовать именной экспорт.
@paromovevg
@paromovevg Жыл бұрын
Привет! Как раз по этому поводу сегодня видео сделаю)
@Andreitrenkal
@Andreitrenkal Жыл бұрын
Могу привести один пример, когда экспорт типа из компонента полезен - для типизации аргументов storybook (если у тебя он есть в проекте, конечно. Если нет, то рекомендую начать использовать). Разумеется, можно по-твоему сделать, но тогда придется доставать тип пропсов с помощью React.ComponentProps, что уже не так удобно, но всё еще остается валидным вариантом
@paromovevg
@paromovevg Жыл бұрын
Я в видео вроде говорил, что внешние типы хороши как раз для uikit компонентов и библиотечных компонентов. И пример со сторибуком как раз про это.
@webDever
@webDever Жыл бұрын
А, без сниппетов вообще грустно жить
@undertale-15075O
@undertale-15075O 7 ай бұрын
5:00 кто мешаешь использовать Pick
@BOCbMOU
@BOCbMOU Жыл бұрын
Преттиер не удаляет запятую в дженериках в .tsx файлах, а вот в .ts удаляет. Впрочем, всегда можно написать , тут и запятая ненужна.
@paromovevg
@paromovevg Жыл бұрын
Если так, отлично! Пойду перепроверю ещё раз, спасибо)
@kryptamine
@kryptamine Жыл бұрын
Ну очень на любителя идея инлайнить типы. На мой взгляд читаемость сильно страдает, разметка смешивается с контрактом. Более того если у вас какие нибудь полиморфные типы с дженериками будут использоваться, заворачивать их в инлайн типы будет проблематично, а это значит что код будет неоднородным, где-то инлайн, где-то нет. В общем так и не понял какую проблему вы решаете инлайном типов, из разумных аргументов услышал только кейс с рефакторингом компонента, когда переименовали компонент, но забыли поправить тип, но я думаю если это является большой проблемой наверняка можно правило для линтера написать чтобы отслеживать такие кейсы.
@avikbox
@avikbox Жыл бұрын
Еще если писать типы сразу инлайном то когда наводишь мышку на компонент сразу видно какие пропсы ожидает. Иначе видишь просто название своего типа или интерфейса, и что с ним делать ? как то тупо получается... Для меня это вообще основная причина писать инлайном типа для пропсов.
@lorandemarcus
@lorandemarcus Жыл бұрын
это зависит от IDE и настроек самой IDE
@avikbox
@avikbox Жыл бұрын
@@lorandemarcus а как такое в vscode настроить не подскажите?
@BOCbMOU
@BOCbMOU Жыл бұрын
@@avikbox в вскоде это по умолчанию. Просто надо деструктуризировать пропсы сразу в аргументах.
@mnik0128
@mnik0128 Жыл бұрын
Интересная идея. Предлагаю не использовать деструктуризацию пропсов. Писать props: {/* типы */} читаемость возрастет
@catbarsic
@catbarsic Жыл бұрын
ts в реакте? Да вы месье извращенец
@АлексейСоколов-у3к
@АлексейСоколов-у3к 11 ай бұрын
?
@тимур_атмосферный
@тимур_атмосферный 2 ай бұрын
скорее это ты просто слабоумный
Современный TS, satisfiсes | как implements только без классов
10:07
Евгений Паромов | Front-end
Рет қаралды 1 М.
إخفاء الطعام سرًا تحت الطاولة للتناول لاحقًا 😏🍽️
00:28
حرف إبداعية للمنزل في 5 دقائق
Рет қаралды 53 МЛН
Офицер, я всё объясню
01:00
История одного вокалиста
Рет қаралды 6 МЛН
Как подписать? 😂 #shorts
00:10
Денис Кукояка
Рет қаралды 8 МЛН
Kluster Duo #настольныеигры #boardgames #игры #games #настолки #настольные_игры
00:47
Двое играют | Наташа и Вова
Рет қаралды 3,4 МЛН
Куда положить типы? Простые советы | При чём здесь DDD
18:12
Евгений Паромов | Front-end
Рет қаралды 2,8 М.
3 правила использования React Query
23:04
Евгений Паромов | Front-end
Рет қаралды 8 М.
Compound Components in React (Design Patterns)
18:21
Cosden Solutions
Рет қаралды 41 М.
Инверсия зависимостей. SOLID для React
9:33
Михаил Непомнящий
Рет қаралды 10 М.
Dependency Inversion - главный инструмент Архитектора
37:17
Евгений Паромов | Front-end
Рет қаралды 6 М.
Правила быстрого обучения, которые ТЕБЕ НЕ ПОНРАВЯТСЯ
21:28
Евгений Паромов | Front-end
Рет қаралды 8 М.
Кто-то еще помнит про эту консоль?
0:51
ПРОСТО ЛЕШКА
Рет қаралды 1,8 МЛН
Пустая коробка вместо iPhone 16 pro
1:00
Кик Обзор
Рет қаралды 995 М.
How To use Adobe Photoshop cc In photo edit
0:41
Nadeem HD Tech
Рет қаралды 660 М.
iPhone 16
0:20
Adhemz
Рет қаралды 13 МЛН