响应式:作用域

EffectScope

创建一个副作用作用域,可以统一管理多个副作用。

类型定义

ts
declare class EffectScope {
  constructor(options?: EffectScopeOptions)

  readonly name: string | symbol
  get state(): EffectState // 'active' | 'paused' | 'disposed'
  get count(): number
  get effects(): DisposableEffect[]

  run<T>(fn: () => T): T
  pause(): void
  resume(): void
  dispose(): void

  onDispose(cb: () => void): this
  onPause(cb: () => void): this
  onResume(cb: () => void): this

  add(effect: DisposableEffect): void
  remove(effect: DisposableEffect): void
  handleError(error: unknown, source: string): void
}

构造函数参数

参数类型说明
optionsEffectScopeOptions可选配置

EffectScopeOptions

属性类型说明
namestring | symbol作用域名称
errorHandler(error, source) => void错误处理器

方法

方法返回值说明
run<T>(fn)T在作用域内执行函数
pause()void暂停作用域内所有副作用
resume()void恢复作用域内所有副作用
dispose()void销毁作用域及所有副作用
onDispose(cb)this注册销毁回调
onPause(cb)this注册暂停回调
onResume(cb)this注册恢复回调

属性

属性类型说明
namestring | symbol作用域名称
stateEffectState当前状态:'active''paused''disposed'
countnumber管理的副作用数量
effectsDisposableEffect[]副作用列表

示例

ts
import { EffectScope, ref, watch } from 'vitarx'

const scope = new EffectScope()

scope.run(() => {
  const count = ref(0)
  watch(count, (val) => console.log(val))
})

// 暂停所有副作用
scope.pause()

// 恢复所有副作用
scope.resume()

// 销毁所有副作用
scope.dispose()

参考EffectScope 详解

onScopeDispose()

注册一个在当前作用域销毁时执行的回调。

类型定义

ts
declare function onScopeDispose(fn: () => void, failSilently?: boolean): void

参数

参数类型说明
fn() => void销毁时执行的回调
failSilentlyboolean无活动作用域时是否静默失败,默认 false

示例

ts
import { EffectScope, onScopeDispose } from 'vitarx'

const scope = new EffectScope()

scope.run(() => {
  onScopeDispose(() => {
    console.log('作用域即将销毁')
  })
})

onScopePause()

注册一个在当前作用域暂停时执行的回调。

类型定义

ts
declare function onScopePause(fn: () => void, failSilently?: boolean): void

onScopeResume()

注册一个在当前作用域恢复时执行的回调。

类型定义

ts
declare function onScopeResume(fn: () => void, failSilently?: boolean): void