этим согласен.
Говорят (https://youtu.be/4mdNDavIGpc?t=2347),
наследование заменяется композицией компонентов...
Я делаю обертку для библиотеки на Svelte
С пропсами, и событиями все отлично:
почти красиво вышло, по аналогии:
https://ru.svelte.dev/examples#event-forwarding
А как быть экспортными функциями?
А точнее?
Все классы либы наследуются от некого Observable. Таким образов у всех потомков есть события change и error. С событиями почти все решается тремя строчками кода: дополнение списка событий недостающими, подписка на список событий при создании компоненты и отписка при уничтожении. Утилиты рулят, хотя эти три строчки приходится дублировать во всех комопнентах (пока только тех, где это нужно уже сейчас, а просто в теории). Но есть методы, типа changed и dispatchEvent, scale, simplify, transform, translate и т.д. с переменным числом параметров. Не все преобразования данных можно повторить, а затем предать измененные данные в компонент. И потом, много времени уходит внутри либы на перевод из входного формата во внутренний и перерисовку (в некоторых случаях объект либы пересоздается, т.к. изменение не всех параметром предусмотрено после создания экземпляра) - использование этих функций дает значительное ускорение. Описание каждой из функций, это примерно три строчки: `export function simplify( arg0, arg1, arg2, arg3 ) { return _unit.simplify( arg0, arg1, arg2, arg3 ); }` И так 5-10 раз в 20-30 компонентах... иногда с добавлением каких-то проверок или ожидания. Этим методы нужны для решения задач. Они занимают вроде бы не много места, зато дублируются в паре десятков компонентов... Можно вставлять в слот доп.комопнент, отвечающий за вызов той или иной функции родителя. Но не все функции обратимы, и, казалось бы логичная отмена функции удалением из слота не всегда возможна, либо требует дополнительного расхода памяти для хранения исходного состояния данных. Да и просто странным выглядит вызов функции компонента генерацией вложенного компонента, ведь бывает нужно вызвать одну функцию, а бывает нужна последовательнось, при том что некоторые завершаются не синхронно... за несколько часов работы получится длинная портянка вложенных компонентов. Можно обойтись и одним копонентом, если забить на обратимость функции, как при вызове экспортной функции и даже ловить return через событие... Такая схема сильно усложняет код. Есть мнение, что нужно написать одну функцию, аля getUnit - возвращающею экземпляр созданного в компоненте объекта либы и дальше в коде творить все что вздумается, но опять же эту функцию требуется повторить в каждом помпоненте-обертке... а хотелось бы написать один раз и унаследовать... Т.е. в идеале нужно что бы у всех копонент экспортировалась минимум одна, одна и та же (возвращающая экземпляр объекта созданного в компоненте) , функция, а при onMount / onDestroy дергались функции подписки и отписки от событий... Это легко решается наследованием, но его нет... А как это решить композицией компонентов?
если это код из свелт компонента, тогда почему бы не делать ре-экспорт просто?
Обсуждают сегодня