FAQ
- 本来是想实现@Skip 可以指定跳过的次数,后来废弃了这个特性,只是实现了@Skip。
理由是不建议通过@Skip 来实现复杂命名空间的作用,我们可以利用 useClass 指向同一个 Service,但是提供不同的 provide 来实现多个服务。
- 服务可能是有初始状态的
如果服务的初始状态需要从服务器端获取,那么就会存在异步的问题,比如父子组件共享一个服务,在服务的状态还没有初始化完毕时,子组件就已经触发了某个动作去修改服务的状态,显然就会导致状态错乱。解决方案有两种。
第一种:使用 rxjs 的 observable 把状态变成流,不确定是否和 reactive 有冲突
第二种:就在在父组件中判断服务的状态是否已经 ready,如果 ready 了才显示子组件,否则展示 loading
- 本库的 inject 和 vue 提供的 inject 不一样,本库的 inject 是从当前组件开始寻找数据的
因为 vue3 自带的 inject 依赖了原型链,并且子组件的 provides 属性默认就是父组件的 provides,从而导致虽然是从当前组件的 provides 开始寻找的服务。但是实际上这个服务有可能是从父组件的 Injector 中获取的。
# useReactiveRef 与 useRef 不兼容
解决不了
主要体现在 react 自带的 useRef 使用的是 current 属性,但是 vue 中 ref 使用的是 value 属性
# 支持 watch 功能
watch 功能其实和 useEffect 已经非常相似了。
# 支持 class component
不支持
经过考虑,本库默认不支持类组件,并且计划把 use-vue-service 库中也去掉对类组件的支持。
如果以后有时间可以考虑新增加一个专门库来支持类组件。
这一点是参考了 mobx 的实现。并且我也认为实在是没有必要使用到类组件,而外增加了实现的复杂度。
# 生命周期
主要是 destroy,卸载资源
# hooks
post hook
merge hook
需要这两个 hook 才能配置响应式能力
# 支持 vue 插件
在 app 实例上声明 providers
编辑 (opens new window)
上次更新: 2023/08/22, 17:17:59