Re: [WICG/webcomponents] [templates] A declarative JavaScript templating API (Issue #1069)

justinfagnani left a comment (WICG/webcomponents#1069)

@svieira 

> There are a number of concerns that have been voiced here that I agree with (the lack of an extra layer of render indirection making it impossible to have a context API, the need to have sensible behavior for a surprising number of built-in objects or else a large amount of boilerplate for each of them, etc.)

I haven't address those here yet, but I don't think these are actual limitations. The idea presented here is very high-level and non-specific at the moment, and can and should adapt to use cases. lit-html, which implements many of the ideas here, has an internal RenderContext which is fed down the template/part tree while rendering. It also shows that supporting a useful set of datatypes is not unreasonable.

> A very common composition pattern is the decorator:
> 
> // In JSX but the same thing can be done in anything
> function Foo(props) {
>   const [myProps, theirProps] = extract(props);
>   return <my-stuff my={myProps.explicit}><their-stuff {...theirProps} /></my-stuff>
> }
> How does this pattern work with this proposal? I'm not seeing how to translate from the Perl-esque / K-like sigils of `?`, `@`, `.` (maybe we should add `!` for signal peeking and `~` for implicated `await`?) for an explicit prop passing to the implicit splat of a bunch of props that I don't own and I don't want to own.

In my proposal, elements will have "element bindings" which don't have a name, and are where spreads can be implemented.

What we've done in Lit before is to support spread with a directive, like:

```ts
function Foo(props) {
  const [myProps, theirProps] = extract(props);
  return <my-stuff my={myProps.explicit}><their-stuff {spread(theirProps)} /></my-stuff>
}
```

This proposal could have more of this built in.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/WICG/webcomponents/issues/1069#issuecomment-3025445330
You are receiving this because you are subscribed to this thread.

Message ID: <WICG/webcomponents/issues/1069/3025445330@github.com>

Received on Tuesday, 1 July 2025 20:44:44 UTC