Skip to content

createStore

创建一个ReactAutoStore实例,是使用@autostorejs/react的入口函数。

ts
import { createStore } from '@autostorejs/react';

签名

ts
function createStore<State extends Dict>(
    initial: State,
    options?: AutoStoreOptions<State>
): ReactAutoStore<State>

参数:

参数 说明
initial 初始状态定义,支持普通状态、同步计算属性、异步计算属性(computed/asyncComputed声明)
options store 配置项

常用选项:

选项 类型 说明
id string store 标识,用于 devtools 显示
debug boolean 开启 Redux DevTools 调试
resetable boolean 是否支持reset(),React 包默认true
signalErrorBoundary ComponentType 信号组件的默认错误边界,React 包默认渲染ERROR

(完整选项参见核心库选项。)

返回值: ReactAutoStore<State>实例:

分类 成员
状态 stategetSnap()reset()
Hooks useReactiveuseAsyncReactiveuseWatchuseDepsuseComputeduseComputedObjectuseFielduseFields
组件 $signal
更新 update()batchUpdate()silentUpdate()peep()
监听 watch()watchObjectscomputedObjects
其他 idoptionsloggerdestroy()

使用说明

  • createStore通常在组件外部(模块作用域)调用,创建全局或模块级共享的 store。
  • 在组件内部创建私有 store 时使用useStore
  • React 包的createStore在核心库AutoStore基础上预设了resetable: true与默认信号错误边界。

示例

tsx
import { createStore, computed } from '@autostorejs/react';

export const store = createStore(
    {
        user: {
            firstName: 'Zhang',
            lastName: 'Fisher',
            // 同步计算属性
            fullName: (user) => user.firstName + ' ' + user.lastName,
        },
        // 异步计算属性
        salary: computed(
            async (scope) => scope.user.age * 10,
            ['user.age'],
            { async: true, initial: 0 },
        ),
    },
    { id: 'app-store', debug: true },
);

// 解构使用
export const { state, $, useReactive } = store;

运行效果如下:

loading

注意事项

不要在组件渲染函数内调用

createStore每次调用都会创建新实例。在组件体内调用会在每次渲染时重复创建 store(且不会销毁),请使用模块作用域或useStore

类型推断

createStore的泛型State会自动推断(无需手写),计算属性、hooks 路径等均能获得完整的类型提示。复杂状态可显式声明:createStore<MyState>(...)