-
-
Notifications
You must be signed in to change notification settings - Fork 830
Closed
Labels
Resolution: Needs InvestigationThis PR or Issue should be investigated from the Stencil teamThis PR or Issue should be investigated from the Stencil team
Description
Prerequisites
- I have read the Contributing Guidelines.
- I agree to follow the Code of Conduct.
- I have searched for existing issues that already report this problem, without success.
Stencil Version
4.22.2
Current Behavior
I am unable to listen to a custom event on a non-stencil element (f.e. a <div>) in JSX. Instead Stencil writes an attribute to DOM after stringifiying the passed function.
Expected Behavior
There should be a way to do this.
System Info
N/ASteps to Reproduce
Put this component in a Stencil app.
import { Component, h, Prop } from '@stencil/core';
@Component({ tag: 'app-root', styleUrl: 'app-root.css', shadow: true })
export class AppRoot {
div!: HTMLElement;
componentDidLoad() {
this.div.dispatchEvent(new CustomEvent('customEvent')); // expect "customEvent" to be logged to console.
}
render() {
return (
<div
ref={el => (this.div = el)}
// @ts-ignore
oncustomEvent={() => console.log('customEvent')}
></div>
);
}
}Instead of customEvent being logged, the DOM will have this in it (see element inspector):
Code Reproduction URL
...
Additional Information
Other JSX frameworks support this. For example,
- React 19 ->
onmYeVeNt={fn}listens for an event namedmYeVeNt(case sensitive) on any custom elements. - Similar with Preact.
- Solid.js and Pota both have explicit
on:wHaTeVeR={}prop syntax (case sensitive) which will always listen to the given event.
The reason it would be good to have this is then users do not need to do a dance with ref.
Having to escape out of one's favorite framework's template system is not desirable.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Resolution: Needs InvestigationThis PR or Issue should be investigated from the Stencil teamThis PR or Issue should be investigated from the Stencil team