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

18 просмотров
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- Автор вопроса

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

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

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

кому не сложно распишите пожалуйста для какой цели тут вот эти скобки и в них пихается указатель?
Михаил Helper
15
Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
Карта сайта