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

Есть ли способ типизировать compose с ts + react? приложение

и компоненты высшего порядка отрабатывают нормально, но появляются ошибки типизации

1. элемент, который обернут в compose JSX element type does not have any construct or call signatures. https://codesandbox.io/s/react-ts-styled-zgckw?file=/src/index.tsx
2. аргументы и возвращаемые значения композируемых функций не подходят друг другу и не вижу возможности поставить в соответствие https://codesandbox.io/s/react-ts-styled-zgckw?file=/src/components/App/App.tsx

18 ответов

40 просмотров
Maksim- Автор вопроса

подозреваю, что нужно приводить арументы или результат компоуза принудительно. может у кого-то есть пример композиции функций на ts с реакт компонентами? материалов практически не обнаружил, кроме маленькой статьи с самописным compose https://rjzaworski.com/2017/09/typescript-react-compose, но это же типичная задача

Уже не такая уж и типичная задача, так как на замену хокам пришли хуки

Maksim- Автор вопроса

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

useTheme и useRouter чем не подходит?

Как раз таки заменишь, и гораздо удобнее, чем в варианте с обёртками обёрток

Maksim- Автор вопроса

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

Чтобы не разрастался компонент. На правах кеков: const useThemeAndRouter = () => ({ theme: useTheme(), router: useRouter() })

Ты используешь очень сложную для статической типизации конструкцию, с которой никто не хочет иметь дела

Maksim- Автор вопроса

не хочу никого обижать, но у больших любителей хуков я часто вижу компоненты в таком стиле function MyComponent() { const [a, b] = useThatHook1(); ... const [a100, b100] = useThatHook100(); } и компоненты превращабтся в простыню

Maksim- Автор вопроса

придется в ts-ignore уйти)

Причём тут Абрамов? Есть объективные критерии: 1) Проще типизация 2) Есть группировка логики 3) Есть переиспользуемость 4) Невозможно нарушить контракт

Эта простыня на порядки проще дебажится, чем цепочка хоков

Maksim- Автор вопроса

цепочка хоков дебажится отдельно с каждым

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

Maksim- Автор вопроса

просто вспомнил картинку, которая подходит любому популярному инструменту

В цепочке хоков баг может возникнуть от перестановки местами этих самых хоков в композе. Я это дебажил. Я туда не вернусь)

Maksim- Автор вопроса

1) согласен 2) как и хоках, причем они более фундаментальны 3) тоже есть 4) тоже невозможно

Maksim- Автор вопроса

оке, попробую, спасибо

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта