petite-vue源码逐行解析:effect函数在@vue-reactivity中的奥秘是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计5569个文字,预计阅读时间需要23分钟。
当通过`effect`将副函数应用于响应上下文注册后,副作用函数在访问响应式对象时将自动收集依赖。并在相关的响应式属性发生变化后,自动触发副作用函数的执行。`// .effect.tsexpo`
当我们通过effect将副函数向响应上下文注册后,副作用函数内访问响应式对象时即会自动收集依赖,并在相应的响应式属性发生变化后,自动触发副作用函数的执行。
// ./effect.ts
export funciton effect<T = any>(
fn: () => T,
options?: ReactiveEffectOptions
): ReactiveEffectRunner {
if ((fn as ReactiveEffectRunner).effect) {
fn = (fn as ReactiveEffectRunner).effect.fn
}
const _effect = new ReactiveEffect(fn)
if (options) {
extend(_effect, options)
if (options.scope) recordEffectScope(_effect, options.scope)
}
// 默认是马上执行副作用函数收集依赖,但可通过lazy属性延迟副作用函数的执行,延迟依赖收集。
本文共计5569个文字,预计阅读时间需要23分钟。
当通过`effect`将副函数应用于响应上下文注册后,副作用函数在访问响应式对象时将自动收集依赖。并在相关的响应式属性发生变化后,自动触发副作用函数的执行。`// .effect.tsexpo`
当我们通过effect将副函数向响应上下文注册后,副作用函数内访问响应式对象时即会自动收集依赖,并在相应的响应式属性发生变化后,自动触发副作用函数的执行。
// ./effect.ts
export funciton effect<T = any>(
fn: () => T,
options?: ReactiveEffectOptions
): ReactiveEffectRunner {
if ((fn as ReactiveEffectRunner).effect) {
fn = (fn as ReactiveEffectRunner).effect.fn
}
const _effect = new ReactiveEffect(fn)
if (options) {
extend(_effect, options)
if (options.scope) recordEffectScope(_effect, options.scope)
}
// 默认是马上执行副作用函数收集依赖,但可通过lazy属性延迟副作用函数的执行,延迟依赖收集。

