3 ms·
I use web components with a render function to generate HTML and templates to provide fine-grained reactivity. Targeted re-rendering of items with relevant stat
by gulugawa 1mo ago
I use web components with a render function to generate HTML and templates to provide fine-grained reactivity. Targeted re-rendering of items with relevant state changes makes performance significantly faster and also makes forms easier to write.
Here is an example of a template used to render a list of events.
const EventItem = () => {
EventItem.eventTime = (eventData) =>{
if(eventData.isRecurring){
return `${eventData.dayOfWeek}s at ${eventData.nextEventTime}`;
}
return `${eventData.nextEventDate} at ${eventData.nextEventTime}`
}
EventItem.url = (eventData) => {
return `/html/groups/event.html?id=${eventData.eventId}&groupId=${eventData.groupId}`
}
EventItem.location = (eventData)=>{
return `${convertLocationDataForDisplay(eventData.eventLocation)}`
}
return `
<li>
<a
class="btn secondary"
{{href=url}}
{{eventName}}
>
</a>
<div
class="event-time"
{{eventTime}}
>
</div>
<div
class="event-location"
{{location}}
>
</div>
</li>
`;
}
BaseDynamicComponent.defineTemplate(EventItem,"EventItem");
This is how the template is used in a component.
<ul
data-array=data
data-template-name=EventItem
></ul>
- shimman 1mo agoDo you prefer frameworks like lit to generate your web components? I always felt like the base APIs were okay-ish but I haven't really investigated web components much. Like honestly once maybe 4 years ago and it was for a POC at work.
- gulugawa 1mo agoI'm using a framework built from scratch with vanilla JS. It includes logic for writing templates. I plan to publish an updated version soon.