之前用 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
sjhhjx0122 2021-06-28 09:17:40 +08:00
目前在使用 pinia,说是根据 vuex5 提案来的,
|