From 62e40e7292cc4db3c4bae7a8ab64a0507e105445 Mon Sep 17 00:00:00 2001 From: dj Date: Mon, 9 Feb 2026 18:23:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(effects):=20=E6=B7=BB=E5=8A=A0=E6=87=92?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E9=80=89=E9=A1=B9=E5=92=8C=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E5=99=A8=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 ReactiveEffectOptions 接口,支持 lazy 和 scheduler 配置 - 实现懒执行功能,当 lazy 为 true 时不立即运行 effect - 添加新的示例文件 lazy.html 演示懒执行效果 - 优化 effect 函数参数结构,支持可选配置项 --- packages/reactivity/src/effect.ts | 10 ++++++-- packages/vue/examples/reactivity/lazy.html | 28 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 packages/vue/examples/reactivity/lazy.html diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 5c926f7..c7f39ac 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -13,9 +13,15 @@ type KeyToDepMap = Map */ const targetMap = new WeakMap() -export function effect(fn: () => T) { +export interface ReactiveEffectOptions { + lazy?: boolean + schedler?: EffectScheduler +} +export function effect(fn: () => T, options?: ReactiveEffectOptions) { const _effect = new ReactiveEffect(fn) - _effect.run() + if (!options || !options.lazy) { + _effect.run() + } } export let activeEffect: ReactiveEffect | undefined diff --git a/packages/vue/examples/reactivity/lazy.html b/packages/vue/examples/reactivity/lazy.html new file mode 100644 index 0000000..13e5a54 --- /dev/null +++ b/packages/vue/examples/reactivity/lazy.html @@ -0,0 +1,28 @@ + + + + + Document + + + +
+ + + \ No newline at end of file