Skip to content

计算选项

部份配置参数只适用于异步计算属性

id

类型string

创建计算属性对象ComputedObject时唯一标识,如果未指定

  • 使用computed所在的路径名作为标识,如user.fullName
  • 动态创建的ComputedObject会自动生成一个唯一标识。

当然,您也可以通过id参数来指定唯一标识。

immediate

类型boolean | 'auto' 默认值'auto'

针对异步计算属性是否在初始化时立刻运行一次计算函数getter.取值如下:

说明
true 在创建异步计算时马上执行一次
false 在创建异步计算时不马上执行一次,后续仅在依赖变化时执行
auto initial==undefined时会马上执行一次,其他值则不马上执行一次

initial

类型:可以通过泛型参数指定Value 默认值:undefined

作为计算属性的初始值。

scope

类型ComputedScope 默认值: Current

指定计算函数的第一个参数,如果未指定,则默认为Current。详见ComputedScope

enable

类型boolean 默认值true

计算开关,当enable=false时不会执行计算。 也可以通过store.computedObjects.get(<id>).enable=<true/false>来统一控制计算属性的开关。

async

类型boolean 默认值undefined

默认情况下,computed函数会通过typeof(fn)=="async function"来判断是否是异步计算函数,以决定如何创建同步或异步计算属性。 但是在返回Promise或者Babel转码等情况下,判断会失效时,需要手动指定async=true

depends

类型ComputedDepends

必填依赖项,用于异步计算属性指定的依赖项。详见ComputedDepends

group

类型string

用于将计算属性分组,便于管理。比如可以通过store.computedObjects.runGroup("a"])来运行指定分组的计算函数。

参考手工运行

objectify

类型boolean 默认值true

是否将创建的computedObject对象保存到store.computedObjects中。 将objectify=false,在React组件中动态创建计算属性时,不将计算属性保存到store.computedObjects中。以便在组件销毁时自动释放。

timeout

类型number | [number,number] 默认值0

用来控制异步函数执行的超时。

  • 指定超时时间,当计算函数执行超过指定时间后,会触发超时错误。
  • 如果timeout=[超时时间,倒计时间隔], 例如:[1000,10]表示1000ms超时,每隔 100ms 更新一下timeout值,实现倒计时的效果。

详见超时处理

noReentry

类型boolean 默认值false

计算函数不可重入,即同一个计算函数在执行过程中,不会再次执行.

abortController

类型()=>AbortController | undefine

提供一个自定义的AbortController用来替代默认的AbortController,用来传递给异步计算函数以便可以取消异步计算.

详见异步计算-取消

retry

类型number 默认值0

用来控制异步计算失败后重试次数。

  • 默认retry=0代表不启用重试控制。
  • retry=3表示最多重试3次,重试间隔为0,加上第1次执行,总共执行4
  • retry=[3,1000]表示最多重试3次,重试间隔为1000ms,加上第1次执行,总共执行4
  • 重试数据可以通过AsyncComputedValue.retry获取
  • 当首次执行失败时触发重试,此时AsyncComputedValue.retry=3,然后每次重试-1,直到为0时停止重试

详见重试处理

extras

类型any

额外参数,用于传递给计算函数。在计算函数中可以通过extras参数获取。

ts
import { AutoStore, computed } from "autostore";
const store = new AutoStore({
    firstName: "Zhang",
    lastName: "Fisher",
    fullName: computed(
        async (user, { extras }) => {
            // 通过extras获取额外参数
            return user.firstName + user.lastName + `${count}`;
        },
        ["./firstName", "./lastName"],
        {
            extras: {
                count: 0,
            },
        },
    ),
});

onError

类型(error:Error)=>void

当执行计算getter函数出错时的回调

onDone

类型(args:{id:string,error:Error | undefined,timeout:boolean ,abort:boolean ,path:string[] | undefined,scope:Scope,value:any}):void

当计算函数执行完成时的回调

reports

用于简单异步计算执行报告, 参考这里

raw

类型boolean 默认值false

默认情况下,计算结果也会进行响应式处理, 通过显式指定raw=true,可以标识为非响应式。

参见结果响应式[./async.html#结果响应式]

throwError

类型boolean 默认值true

当执行计算函数时如果出错是否抛出错误,默认true。仅同步计算时有效。 如果false时不会抛出错误,只能通过监听computed:error事件来获取错误,或者通过computedObjects.get获取计算对象来获取。

重载选项

当使用<AsyncComputedValue>.run(<RuntimeComputedOptions>)store.computedObjects.run(<RuntimeComputedOptions>)手动运行计算函数时,允许对部分选项进行重载覆盖。

ts
type RuntimeComputedOptions = ComputedOptions & {
    first?: boolean; // 当第一次运行时为true
    operate?: StateOperate; // 变化的依赖信息
};

注意

  • 调用run方法手动执行计算函数时允许重载部分选项,但不允许重载iddependsscope等关键选项。
  • 计算选项的重载仅在当前运行时有效,不会影响声明时的配置。