169 похожих чатов

Всем привет! Подскажите плиз как объявить дженерик компонент стрелочной функцией? export const

MyComp: FunctionComponent<MyProps<…>> = ({ prop }) => {
return <div>hello</div>;
};


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

export const MyComp<T>: FunctionComponent<MyProps<T>> = ({ prop }) => {
return <div>hello</div>;
};

Но такой синтаксис неверный. Как правильно написать?

Это необходимо чтобы во время использования компонента я мог задать тип с которым работает компонент:

<MyComp<MyType> />

43 ответов

8 просмотров

если вы пришли к таким костылям то вероятно делаете что-то не так

Виталий- Автор вопроса
Stanislav
если вы пришли к таким костылям то вероятно делает...

Не понял. Если я написал дженерик компонент то я делаю что-то не то? Дженерик компонентов не должно существовать?)

const Comp = <T,>(props: Props<T>) => ...

Виталий- Автор вопроса
Stanislav
да.

А для чего тогда придумали дженерик компоненты?) Почему во всех популярных библиотеках они есть? Как передавать типы в дженерик типы пропсов?)

Виталий- Автор вопроса
Ivan 🧑‍🚀
const Comp = <T,>(props: Props<T>) => ...

Спасибо) А можно как-то это сделать с использованием типа FunctionComponent ?

Виталий
Спасибо) А можно как-то это сделать с использовани...

Не надо его использовать, он не очень. Тс отлично выводит типы из моего примера

Виталий
А для чего тогда придумали дженерик компоненты?) П...

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

Виталий
Спасибо) А можно как-то это сделать с использовани...

const FN = <T,>(props: T): ReturnType<React.FunctionComponent<T>> => { return <></> } Можно так, но похоже на костыль)

Dimitri 👰🏼‍♀️🧝🏻‍♀️🤦🏼‍♀️
const FN = <T,>(props: T): ReturnType<React.Functi...

Если посмотреть что возвращает FC, то можно написать так const FN = <T,>(props: T): React.ReactElement<T> => { return <></> }

Виталий- Автор вопроса
Dimitri 👰🏼‍♀️🧝🏻‍♀️🤦🏼‍♀️
const FN = <T,>(props: T): ReturnType<React.Functi...

Спасибо! А почему если после T убрать запятую то перестаёт работать? Что это за синтаксис такой?

Виталий
Спасибо! А почему если после T убрать запятую то п...

потому что он видит это как реакт-компонент иначе

Виталий
Спасибо! А почему если после T убрать запятую то п...

потому что tsx корявенький, считает, что <T> - открывающий “элемент” компонента Т

Dimitri 👰🏼‍♀️🧝🏻‍♀️🤦🏼‍♀️
Если посмотреть что возвращает FC, то можно написа...

а можно разрешить тайпскрипту самому справляться, как взрослому const FN = <T,>(props: T) => { return <></> }

Виталий- Автор вопроса
Ivan 🧑‍🚀
а можно разрешить тайпскрипту самому справляться, ...

В этом случае тип props неверный. Например он не содержит children.

Ivan 🧑‍🚀
а у любого компонента есть children?

я думаю тут апеллируют к тому, что FC подразумевает их наличие по умолчанию

Dimitri 👰🏼‍♀️🧝🏻‍♀️🤦🏼‍♀️
Да, но человек хотел возвращать FC

ну да, ты прав — я чёт не уследил за твоими “интонациями”

Виталий- Автор вопроса
Mikhail Chukhnin
я думаю тут апеллируют к тому, что FC подразумевае...

я понимаю. и считаю, что далеко не каждый компонент должен иметь children в тайпингах. поэтому и FC считаю херовым типом. потому что не все компоненты должны принимать детей

Ivan 🧑‍🚀
https://codesandbox.io/s/competent-hypatia-zhl94?f...

я бы побоялся такое людям показывать, но это вкусовщина конечно

Stanislav
я не знаю для чего это придумали, это решает пробл...

его придумали, чтобы было удобно. чтобы полиморфизм был статически типизирован. если тебе полиморфизм не нужен — понимание придёт со временем

Stanislav
я бы побоялся такое людям показывать, но это вкусо...

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

Ivan 🧑‍🚀
screenshot его придумали, чтобы было удобно. чтобы полиморфиз...

это тот случай когда тайпскрипт в моей картине мира делает слишком много

Stanislav
это тот случай когда тайпскрипт в моей картине мир...

тут одно из двух — либо у тебя картина маленькая, либо параметрический полиморфизм придумали дураки для дураков

Ivan 🧑‍🚀
тут одно из двух — либо у тебя картина маленькая, ...

а где третий вариант что я не писал код который требовал бы подобных костылей?

Виталий- Автор вопроса
Stanislav
а где третий вариант что я не писал код который тр...

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

Ivan 🧑‍🚀
он в первых двух — ты считаешь параметрический пол...

я считаю дженерики в реакт компонентах костылями*

Stanislav
я считаю дженерики в реакт компонентах костылями*

мне кажется тут не о дженериках речь, а скорее о статическая типизация vs динамическая

Stanislav
я считаю дженерики в реакт компонентах костылями*

дженерики — это параметрический полиморфизм. дженерики в реакт-компонентах — это всё так же параметрический полиморфизм

Ivan 🧑‍🚀
дженерики — это параметрический полиморфизм. джене...

есть компонент, есть его имплементация, в моей картине мира если для этого требуется дженерик то человек делает что-то неправильно </thread>

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Утра доброго. Просветите пожалуйста. Хочу сделать rest сервер на делфи. Посмотрел 3 фреймворка: dmvc, Mars, mormot. Ни в одном из них не упоминается ассинхронная обработка вхо...
Сергей Бычков
10
Как попросить stack install делать executable без .exe на винде?
Danila Danko
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
возможно для форматирования TimeStampZ нужен другой механизм, не?
Роман Лях (rgreat)
13
Карта сайта