You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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/A
Steps 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})exportclassAppRoot{div!: HTMLElement;componentDidLoad(){this.div.dispatchEvent(newCustomEvent('customEvent'));// expect "customEvent" to be logged to console.}render(){return(<divref={el=>(this.div=el)}// @ts-ignoreoncustomEvent={()=>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 named mYeVeNt (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.
The text was updated successfully, but these errors were encountered:
If I change it from <div to <foo-bar it will set the JS property instead of an attribute, but still not listen to a customEvent.
Based on this, it seems that if we use a <custom-element> from another framework (for example, Lit, Atomico, Enhance, Lume Element, etc) we won't be able to listen for events on those elements in JSX, and will have to undesirably escape out of Stencil's JSX into plain JS.
@trusktr what happens if you change the listener toonCustomEvent (with a capital 'C')?
I think stencil, rightly or wrongly, checks for on{UPPERCASELETTER}whatever for event handlers.
Prerequisites
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
Steps to Reproduce
Put this component in a Stencil app.
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,
onmYeVeNt={fn}
listens for an event namedmYeVeNt
(case sensitive) on any custom elements.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.
The text was updated successfully, but these errors were encountered: