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 ответов

23 просмотра

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

Виталий- Автор вопроса
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>

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта