Skip to content

常见问题 ​

为什么脚本里要写 .value,标准 Pinia 不用? ​

UTS 编译到 Kotlin/Swift 后没有 Proxy,reactive() 无法自动解包 Ref(实测字段保持 RefImpl 原样)。模板不受影响——经 storeToRefs 解构后的 Ref 在 uvue 模板中自动解包。详见实现原理。

为什么没有 $subscribe? ​

整体订阅需要遍历 store 的全部 state 字段建立依赖,UTS 无法反射枚举对象字段;实测 deep watch 方案在 Android 端对 RefImpl 字段不触发(Web 端正常,双端不一致故裁掉)。替代:字段级订阅 watch(store.count, cb),语义等价且类型更明确。

为什么 patch 是顶层函数而不是 store.$patch()? ​

UTS 对象不可动态注入属性,$patch 方法挂不到 setup 返回的 type 对象上。顶层函数 patch(store, fn) 是平台约束下的等价形态。

为什么不需要 app.use(pinia)? ​

unix-pinia 使用模块级注册表而非 Vue 插件注入链,import 即用。实测原生端 app.use(Pinia实例) 不会触发 install(双端不一致),因此免挂载是唯一可靠形态。需要插件时在 main.uts 顶层 setActivePinia(createPinia().use(plugin))。

支持 iOS / 鸿蒙吗? ​

代码全端同构(纯 UTS、无平台分支),预期 Swift / ArkTS 编译链可直接通过;目前 Android + Web 已真机/构建实测,iOS / 鸿蒙待复验后更新平台支持。

蒸汽模式项目能用吗? ​

能运行,但不建议——蒸汽模式全平台可直接使用标准 Pinia(官方适配),无需本库。unix-pinia 的目标场景是 vdom 模式 App 原生端。

getter 能依赖另一个 store 吗? ​

技术上可行,但不推荐——跨 store 引用建议放在 action 内或 setup 顶部,避免 getter 依赖链形成循环(与标准 Pinia 注意事项一致)。见最佳实践。

与直接导出全局 reactive 变量比,价值在哪? ​

官方轻量方案(导出模块级 reactive 变量)适合单状态单文件。unix-pinia 提供的是范式:id 命名空间与幂等、统一组织(state/getter/action 分层)、storeToRefs 模板绑定、实例 API、跨 store 组合、以及向标准 Pinia 迁移的最低成本路径。

Released under the MIT License.