rimitive-compose
Compose Rimitive services with the right modules. Use when setting up a new service, adding primitives, or understanding what modules to import and from where.
安装与使用
请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。
查看来源 ↗使用指南技能说明
Composing Rimitive Services
Rimitive uses compose() to wire modules together into a reactive service. This guide helps you choose the right modules and imports.
Import Paths
// Core composition
import { compose } from '@rimitive/core';
// Signal modules (from /extend path)
import {
SignalModule,
ComputedModule,
EffectModule,
BatchModule,
SubscribeModule,
UntrackModule,
} from '@rimitive/signals/extend';
// View module factories (need an adapter)
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createPortalModule } from '@rimitive/view/portal';
import { createLoadModule } from '@rimitive/view/load';
// Adapters
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { createSSRAdapter } from '@rimitive/ssr/adapter';
import { createHydrationAdapter } from '@rimitive/ssr/hydration';
// View helpers
import { MountModule } from '@rimitive/view/deps/mount';
import { OnModule } from '@rimitive/view/deps/addEventListener';
// Router
import { createRouter } from '@rimitive/router';
// Resource (async data)
import { createResource } from '@rimitive/resource';
Common Service Configurations
Signals Only (No UI)
For headless logic, state management, or Node.js:
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
const svc = compose(SignalModule, ComputedModule, EffectModule);
const { signal, computed, effect } = svc;
Signals + Batching
When you need to batch multiple updates:
import { compose } from '@rimitive/core';
import {
SignalModule,
ComputedModule,
EffectModule,
BatchModule,
} from '@rimitive/signals/extend';
const svc = compose(SignalModule, ComputedModule, EffectModule, BatchModule);
const { signal, computed, effect, batch } = svc;
Full View Service (Browser)
For building UI components:
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { MountModule } from '@rimitive/view/deps/mount';
import { OnModule } from '@rimitive/view/deps/addEventListener';
const adapter = createDOMAdapter();
const svc = compose(
SignalModule,
ComputedModule,
EffectModule,
createElModule(adapter),
createMapModule(adapter),
createMatchModule(adapter),
MountModule,
OnModule
);
const { signal, computed, effect, el, map, match, mount, on } = svc;
View Service with Router
Add client-side routing:
import { compose, merge } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { MountModule } from '@rimitive/view/deps/mount';
import { createRouter } from '@rimitive/router';
const adapter = createDOMAdapter();
const baseSvc = compose(
SignalModule,
ComputedModule,
EffectModule,
createElModule(adapter),
createMapModule(adapter),
createMatchModule(adapter),
MountModule
);
// Add router (uses merge because router needs the base service)
const router = createRouter(baseSvc);
const svc = merge(baseSvc, router);
const { signal, computed, el, map, match, mount, route, link, navigate } = svc;
SSR Service
For server-side rendering:
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createSSRAdapter } from '@rimitive/ssr/adapter';
const adapter = createSSRAdapter();
const svc = compose(
SignalModule,
ComputedModule,
EffectModule,
createElModule(adapter),
createMapModule(adapter),
createMatchModule(adapter)
);
Module Reference
| Module | Provides | Use When |
|---|---|---|
SignalModule |
signal() |
Always - core reactive state |
ComputedModule |
computed() |
Deriving values from signals |
EffectModule |
effect() |
Side effects on signal changes |
BatchModule |
batch() |
Batching multiple updates |
SubscribeModule |
subscribe() |
External subscriptions to signals |
UntrackModule |
untrack() |
Reading without tracking |
createElModule(adapter) |
el() |
Building DOM elements |
createMapModule(adapter) |
map() |
Reactive lists |
createMatchModule(adapter) |
match() |
Conditional rendering |
createPortalModule(adapter) |
portal() |
Render to different DOM location |
createLoadModule(adapter) |
load() |
Async component loading |
MountModule |
mount() |
Mounting specs to DOM |
OnModule |
on() |
Event listener helper with auto-batching |
Adapter Pattern
View modules need an adapter because Rimitive is renderer-agnostic:
// DOM (browser)
const adapter = createDOMAdapter();
// SSR (server)
const adapter = createSSRAdapter();
// Hydration (client, after SSR)
const adapter = createHydrationAdapter(ssrHtml);
// Custom (canvas, WebGL, etc.)
const adapter = createMyAdapter();
The same view code works with any adapter—swap adapters to change where/how elements render.
Service Types
Export a type for your service to use in behaviors and components:
// service.ts
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
const adapter = createDOMAdapter();
export const svc = compose(
SignalModule,
ComputedModule,
EffectModule,
createElModule(adapter)
);
// Export the service type for behaviors
export type Service = typeof svc;
Then use in behaviors:
import type { Service } from './service';
const myBehavior = (svc: Service) => () => {
const { signal, computed } = svc;
// ...
};
使用示例
查看来源仓库中的使用示例与配置说明。
查看来源 ↗来源历史
- 收录时间
- 2026-01-20
- 索引更新时间
- 2026-01-26
- Branch
- main
收录与同步日期属于本站记录。源码修改历史请查看来源仓库。
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!