Size: a a a

2020 December 21

AP

Alexander Ponomarev in Svelte [svelt]
Dan Kozlov
Синтаксис on:* — это же не только форвардинг, но и обработка событий. Вот будет on:*={callback} — что делать?
это проблемы конкретного предложения реализации
источник

ON

Oleg N in Svelte [svelt]
Dan Kozlov
Синтаксис on:* — это же не только форвардинг, но и обработка событий. Вот будет on:*={callback} — что делать?
только форвардинг, on:*={callback} такого нет, и не нужно
источник

AP

Alexander Ponomarev in Svelte [svelt]
https://github.com/IBM/carbon-components-svelte/blob/master/src/Button/Button.svelte#L116 вот эту проблему пытаются решить.

1. Тут три раза повтор эвентов
2. Если кому-то понадобится focus/blur то его нет и его не добавить пока это не сделают на гитхабе
источник

AP

Alexander Ponomarev in Svelte [svelt]
ты сделал кнопку, но она у тебя неполноценная замена обычному <button> она урод без эвентов
источник

DK

Dan Kozlov in Svelte [svelt]
Ну у меня с таким синтаксисом было бы множество вопросов, конечно. Самый первый, пожалуй.

Child.svelte

<div on:click={() => dispatch('click')}>Hey</div>
<button on:*>click</button>

Parent.svelte
<Child on:click={() => console.log('что я такое?')} />
источник

AP

Alexander Ponomarev in Svelte [svelt]
Dan Kozlov
Ну у меня с таким синтаксисом было бы множество вопросов, конечно. Самый первый, пожалуй.

Child.svelte

<div on:click={() => dispatch('click')}>Hey</div>
<button on:*>click</button>

Parent.svelte
<Child on:click={() => console.log('что я такое?')} />
well known эвенты можно зпдокуиенировать как это сделано в реакте
источник

AP

Alexander Ponomarev in Svelte [svelt]
остальное EventListener
источник

DK

Dan Kozlov in Svelte [svelt]
Не понял.
источник

ON

Oleg N in Svelte [svelt]
Dan Kozlov
Ну у меня с таким синтаксисом было бы множество вопросов, конечно. Самый первый, пожалуй.

Child.svelte

<div on:click={() => dispatch('click')}>Hey</div>
<button on:*>click</button>

Parent.svelte
<Child on:click={() => console.log('что я такое?')} />
в чем проблема?, в обоих случаях евент объект прилетает, дальше можешь его внутренновсти проверить, а чаще всего достаточно самого события
источник

AP

Alexander Ponomarev in Svelte [svelt]
ты можешь описать интерфейс на тсе для этого компонента)

[event: string]: EventListener
источник

AP

Alexander Ponomarev in Svelte [svelt]
для общеизвестных эвентов можешь вообще строго описать как в реакте
источник

DK

Dan Kozlov in Svelte [svelt]
Oleg N
в чем проблема?, в обоих случаях евент объект прилетает, дальше можешь его внутренновсти проверить, а чаще всего достаточно самого события
То есть мне в родителе надо знать, что ивент click у ребёнка может быть не только клик от дома, но и клик от дива? Разве это не нарушение инкапсуляции компонентов?
источник

AP

Alexander Ponomarev in Svelte [svelt]
HtmlElement существует
источник

AS

Alexey Schebelev in Svelte [svelt]
Dan Kozlov
Ну у меня с таким синтаксисом было бы множество вопросов, конечно. Самый первый, пожалуй.

Child.svelte

<div on:click={() => dispatch('click')}>Hey</div>
<button on:*>click</button>

Parent.svelte
<Child on:click={() => console.log('что я такое?')} />
А если вместо on:* будет click? Т.е. по вашему инеапсуляция и сейчас нарушена
источник

ON

Oleg N in Svelte [svelt]
Dan Kozlov
То есть мне в родителе надо знать, что ивент click у ребёнка может быть не только клик от дома, но и клик от дива? Разве это не нарушение инкапсуляции компонентов?
нет, достаточно знать что это клик и использовать
источник

AP

Alexander Ponomarev in Svelte [svelt]
это все вопрос документирования
источник

DK

Dan Kozlov in Svelte [svelt]
Alexander Ponomarev
ты можешь описать интерфейс на тсе для этого компонента)

[event: string]: EventListener
В реакте нет ивентов ж. Там как раз эту проблему решить проще простого, ты получил в пропсах коллбэк и к какому элементу его присобачил, с тем он и работает.
источник

AP

Alexander Ponomarev in Svelte [svelt]
ну в свелте получил колбэк и модификатор для него
источник

AP

Alexander Ponomarev in Svelte [svelt]
это все не проблема)
источник

DK

Dan Kozlov in Svelte [svelt]
Alexey Schebelev
А если вместо on:* будет click? Т.е. по вашему инеапсуляция и сейчас нарушена
Проблема on:* в том, что ты не знаешь, к чему родитель подсоединится. Одно дело, когда у тебя есть очевидный dispatch('click'), другое — когда у тебя на все on:* будет навешиваться листенер от родителя, ну и ты там уже в родителе проводи тысячу проверок, чтобы убедиться, что у тебя пришло нормальное событие, а не мусор какой-то.
источник