-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
feat: add support of handleEvent object listener #15856
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
🦋 Changeset detectedLatest commit: c5b92b1 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Is this worth adding? It seems like it's a non-zero amount of complexity and overhead for a basically useless feature, but if there's a legitimate use for handleEvent objects I suppose it could make sense to match the DOM spec |
I've been using this feature for a little while and have found it quite useful. Here's the article through which I found out about it, it's pretty interesting |
Oh, somehow I've missed that |
I'm also unclear on the real world benefit of this, can someone ELI5? I'm familiar with Andrea's article and I can't quite wrap my head around where it would be useful (though I do find myself wondering if we could take advantage of this approach internally instead of using delegation) |
I was actually thinking of making a PR that would do that, should I start working on it? |
How so? Is
Is it easier than doing this? <script>
const handlers = {
onmouseenter() {
console.log('enter');
},
onmouseleave() {
console.log('leave');
}
};
</script>
<div {...handlers}></div> What would it look like — this? <script>
const handler = {
handleEvent(e) {
this['on' + e.type]?.(e);
},
onmouseenter() {
console.log('enter');
},
onmouseleave() {
console.log('leave');
}
};
</script>
<div onmouseenter={handler} onmouseleave={handler}></div> It doesn't seem like an improvement. Maybe I'm missing something but I'm struggling to come up with a scenario where it's helpful.
Aside from #8196 no-one has ever asked for it, so it feels like YAGNI to me.
As long as you're at peace with the possibility that it wouldn't get merged 😅 it would have to have the same-or-better performance/memory characteristics, and not having any breaking changes in terms of timing etc. (It's possible that we'd actually be able to improve the timing situation, since handlers manually added with |
I just looked at Solid's implementation and they also allow passing listener options on the object. Interesting idea. Though, they did it mostly to support adding listeners with the capture/passive/once options declaratively in the markup. |
I did it just because the issue has the |
Closes #8196
The type of
on:event
on components is still function only, though it works with the object handler. Not sure where to fix it.In the following case, it can be considered kind of a breaking change:
and any other place where the event handler is expected to be function only.
Also, the handler object seems to never get hoisted.
Before submitting the PR, please make sure you do the following
feat:
,fix:
,chore:
, ordocs:
.packages/svelte/src
, add a changeset (npx changeset
).Tests and linting
pnpm test
and lint the project withpnpm lint