-
-
Notifications
You must be signed in to change notification settings - Fork 0
Define And Components
define({ name?, props?, layers?, script, template })Status: Current.
define creates an Effuse component blueprint. script runs when the component
state is created. Its returned object becomes the template context together with
reactive props and children.
const Greeting = define({
name: 'Greeting',
props: defineProps<{ name: string }>(),
script({ props, computed }) {
const label = computed(() => `Hello, ${props.name}`);
return { label };
},
template: ({ label }) => <h1>{label}</h1>,
});Props are reactive and are updated in place during reconciliation. Do not copy a prop into an ordinary variable when later prop changes should remain visible.
The current script context includes:
| Group | Members |
|---|---|
| Inputs |
props, layers, router
|
| Reactivity |
signal, computed, watch, watchMultiple, watchEffect
|
| Lifecycle |
onBeforeMount, onMount, onBeforeUnmount, onUnmount
|
| Capabilities |
useLayer, useService, useComponent, store, useStore
|
| Composition |
provide, inject, expose, useCallback, useMemo
|
Prefer alias layer records or typed direct layer helpers. String store/service lookups remain escape hatches and compatibility surfaces.
Children are available in the template context:
const Panel = define({
script: () => ({}),
template: ({ children }) => <section class="panel">{children}</section>,
});const Clock = define({
script({ signal, onMount, onUnmount }) {
const now = signal(Date.now());
let timer: ReturnType<typeof setInterval> | undefined;
onMount(() => {
timer = setInterval(() => (now.value = Date.now()), 1000);
});
onUnmount(() => {
if (timer) clearInterval(timer);
});
return { now };
},
template: ({ now }) => <time>{now}</time>,
});Watchers created through the script context are scoped to component unmount.
Effuse exports For, Show, Switch, Dynamic, Repeat, Await,
Suspense, and ErrorBoundary. Use these for explicit control flow and async
boundaries. JSX expressions may also contain signals and functions that resolve
to Effuse children.
A component can define blueprint error/loading behavior through lower-level
APIs. Dynamic render failures without a custom boundary produce a visible
data-effuse-render-error alert rather than silently dropping the subtree.