之前用 vuex4 倒是实现了和 ts 的结合,但是代码太繁琐,vuex5 遥遥无期,我就想用单例的数据共享和 vue3 的响应数据搞个简化版的,想问问这么写有没有什么坑?
class _Store { ... private _name = ref('a'); public get name() { return readonly(this._name); } public setName = (v: string) => { this._name.value = v; }; private _person = reactive({ name: 'test', age: 12 }); public get person() { return readonly(this._person); } public setPerson = (v?: { name?: string; age?: number }) => { v && Object.assign(this._person, v); }; ... }
![]() | 1 powerfulyang 2021-06-25 17:26:48 +08:00 mark 。我也是这样写的 也想知道 |
2 wednesdayco 2021-06-25 17:57:18 +08:00 支持! |
3 faceRollingKB 2021-06-25 18:52:10 +08:00 get 和 set 无法跟 template 双向绑定,使用$watch 来模拟 computed 和 watch |
![]() | 4 CokeMine 2021-06-26 11:14:46 +08:00 via Android 感觉你说的应该类似于这个 https://www.zhihu.com/answer/1188185176 尤大在这个回复评论的是“完全单例且不需要 SSR 就可以” |
![]() | 5 doommm 2021-06-27 10:42:33 +08:00 目前我是直接用一个叫 pinia 的库 https://pinia.esm.dev/introduction.html |
6 IndexXuan 2021-06-27 12:54:42 +08:00 via iPhone 写个 useGlobalState 即可 |
![]() | 7 gzf6 OP @faceRollingKB 嗯,原则上 store 里的数据禁止双向绑定,可以自定义 computed 的 get 和 set 之类的实现 |
![]() | 10 linkopeneyes 2021-06-28 09:17:40 +08:00 目前在使用 pinia,说是根据 vuex5 提案来的, |