跳转到内容

Solid

@iostore/soliduseIO 返回 Accessor,天然契合 Solid 的响应式读取模型。

  • Solid 组件内按路径粒度订阅。
  • 派生值与组件渲染解耦。
  • 高频更新下保持稳定渲染开销。

安装相关依赖(任选一种包管理工具):

Terminal window
npm i @iostore/store @iostore/solid
import { io } from '@iostore/store';
import { useIO } from '@iostore/solid';
const count = io(0);
export function Counter() {
const value = useIO(count);
return <button onClick={() => count.set((v) => v + 1)}>{value()}</button>;
}
import { io } from '@iostore/store';
import { derived } from '@iostore/store/derived';
import { useIO } from '@iostore/solid';
const store = io({ count: 0 });
const doubled = derived([store.count], (value) => value * 2);
export function Summary() {
const value = useIO(doubled);
return <span>{value()}</span>;
}
const value = useIO(count, { schedule: 'microtask' });

可选值:sync | microtask | animationFrame

场景API说明
读取 Unit/DeriveduseIO(unitOrDerived, options?)返回 Accessor,需要 value() 调用。
通知调度options.schedulesync / microtask / animationFrame
路径写入`unit.set(nextupdater)`
批量写入batch(fn)降低高频写入下的重算成本。
组合派生derived(deps, compute)把计算逻辑从组件中抽离。
// 错误:把 Accessor 当普通值
const value = useIO(store.count);
// <span>{value}</span>
// 推荐:调用 Accessor
const value2 = useIO(store.count);
// <span>{value2()}</span>
// 错误:组件内做复杂派生
// const heavy = () => expensive(store.list.get());
// 推荐:把计算放到 derived
const summary = derived([store.count], (c) => c * 2);
  • 忘记 Accessor 需要调用(value())。
  • 组件订阅粒度过粗导致无关重算。
  • 高频输入未做通知节制。
  • 优先订阅叶子路径 Unit。
  • 派生计算放在 derived,组件仅消费结果。
  • 配合 Batching 或调度策略控制通知频率。