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
Native as in "name of a tag that's supported by the browser by default". div.foo won't be a sub-component, Something.foo might be.
Though I suppose this syntax should work for any kind of element/component? 🤔 I wasn't thinking about that for some reason. In that case sure, without a space its ambiguous.
div.foo will be a subcomponent. The rules (as they are implemented) are a bit different than people sometimes expect. People seem to think that the capital makes it a component, which isn’t the case. There’s also no “knowledge” in JSX about “native” or not: it’s agnostic to the semantics of HTML.
Here’s the rules quoted from the MDX site:
If you ever wondered what the rules are for whether a name in JSX (so x in <x>) is a literal tag name (like h1) or not (like Component), they are as
follows:
If there’s a dot, it’s a member expression (<a.b> -> h(a.b)),
which means that the b component is taken from object a
Otherwise, if the name is not a valid identifier, it’s a literal (<a-b> -> h('a-b'))
Otherwise, if it starts with a lowercase, it’s a literal (<a> -> h('a'))
Otherwise, it’s an identifier (<A> -> h(A)), which means a component A
Activity
orenelbaum commentedon Jan 6, 2023
<div .my-class />(needs the space to remove ambiguity)fabiospampinato commentedon Jan 20, 2023
@orenelbaum it's not ambiguous because this syntax can only be used on native elements and native elements don't have properties like that.
wooorm commentedon Jan 20, 2023
Define native? Is a-b native? Also: a.b is a member expression, component b from object a, I think that's what's meant here
fabiospampinato commentedon Jan 20, 2023
Native as in "name of a tag that's supported by the browser by default".
div.foowon't be a sub-component,Something.foomight be.Though I suppose this syntax should work for any kind of element/component? 🤔 I wasn't thinking about that for some reason. In that case sure, without a space its ambiguous.
wooorm commentedon Jan 21, 2023
div.foowill be a subcomponent. The rules (as they are implemented) are a bit different than people sometimes expect. People seem to think that the capital makes it a component, which isn’t the case. There’s also no “knowledge” in JSX about “native” or not: it’s agnostic to the semantics of HTML.Here’s the rules quoted from the MDX site:
lxsmnsyc commentedon Feb 9, 2023
div.fooalways counts as aJSXMemberExpression. A famous example would be Framer Motion's<motion.div>ahmed0saber commentedon Mar 14, 2024
Why not adding these shortcuts as user snippets in your code editor?