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

В Svelte нет наследования, и по большей части я с

этим согласен.
Говорят (https://youtu.be/4mdNDavIGpc?t=2347),
наследование заменяется композицией компонентов...


Я делаю обертку для библиотеки на Svelte
С пропсами, и событиями все отлично:
почти красиво вышло, по аналогии:
https://ru.svelte.dev/examples#event-forwarding

А как быть экспортными функциями?

3 ответов

16 просмотров

А точнее?

Pavel 🦇 Malyshev
А точнее?

Все классы либы наследуются от некого 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 дергались функции подписки и отписки от событий... Это легко решается наследованием, но его нет... А как это решить композицией компонентов?

Евгений Гуреев ☭ Гуреев ☭
Все классы либы наследуются от некого Observable. ...

если это код из свелт компонента, тогда почему бы не делать ре-экспорт просто?

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта