响应式:作用域
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
}构造函数参数
| 参数 | 类型 | 说明 |
|---|---|---|
options | EffectScopeOptions | 可选配置 |
EffectScopeOptions
| 属性 | 类型 | 说明 |
|---|---|---|
name | string | symbol | 作用域名称 |
errorHandler | (error, source) => void | 错误处理器 |
方法
| 方法 | 返回值 | 说明 |
|---|---|---|
run<T>(fn) | T | 在作用域内执行函数 |
pause() | void | 暂停作用域内所有副作用 |
resume() | void | 恢复作用域内所有副作用 |
dispose() | void | 销毁作用域及所有副作用 |
onDispose(cb) | this | 注册销毁回调 |
onPause(cb) | this | 注册暂停回调 |
onResume(cb) | this | 注册恢复回调 |
属性
| 属性 | 类型 | 说明 |
|---|---|---|
name | string | symbol | 作用域名称 |
state | EffectState | 当前状态:'active'、'paused'、'disposed' |
count | number | 管理的副作用数量 |
effects | DisposableEffect[] | 副作用列表 |
示例
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()onScopeDispose()
注册一个在当前作用域销毁时执行的回调。
类型定义
ts
declare function onScopeDispose(fn: () => void, failSilently?: boolean): void参数
| 参数 | 类型 | 说明 |
|---|---|---|
fn | () => void | 销毁时执行的回调 |
failSilently | boolean | 无活动作用域时是否静默失败,默认 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): voidonScopeResume()
注册一个在当前作用域恢复时执行的回调。
类型定义
ts
declare function onScopeResume(fn: () => void, failSilently?: boolean): void