43 条回复  ·  4568 次点击
jaydenWang 楼主 初学 2025-12-24 09:44:30
@shunia 1. 解决了 zustand 没有计算属性的问题,有了计算属性,就不需要在组件层 selector ,可以把所有状态内聚的 store 中,计算属性 store 内以及各个组件都可以复用。可以做到没有 UI 的情况下,完成完整的业务逻辑 2. 把“set”方法保护起来,组件中是无法 set 的,可以自由读取状态,set 状态必须调用 store 的 action
jaydenWang 楼主 初学 2025-12-24 09:47:40
@rich1e 这是 Zenith 的性能优势。借助 immer 的不可变状态,共享引用以及 Zenith 的计算属性,可以实现更改一个深度状态,只渲染状态树的这条分支
gkinxin 初学 2025-12-24 10:02:42
你这案例一个 useState 都写完了。
zzlove 小成 2025-12-24 10:06:04
简单业务我觉得这样更简单直观,Store 代码算是 ts 类型标注就几十行 https://i.imgur.com/C4QyYV1.png
jaydenWang 楼主 初学 2025-12-24 10:08:45
@gkinxin 这一块示例不完整,github 有完整的示例。多个组件如何读取状态、set action
novaline 小成 2025-12-24 10:11:46
RTK 足矣,不要造轮子了
mrwangjustsay 小成 2025-12-24 10:13:45
https://github.com/MrWangJustToDo/reactivity-store
jaydenWang 楼主 初学 2025-12-24 10:14:17
@novaline 没有重复造轮子,核心是 immer 。github 有跟 RTK 的对比
pakholeung372 初学 2025-12-24 10:20:01
export class Service implements IServiceWithStore { store useState setState getState constructor() { this.store = create( () => ({ current: undefined, }), ) this.useState = this.store this.setState = this.store.setState this.getState = this.store.getState } getCurrent(state = this.getState()) { return state.current } useCurrent() { return this.store.useState(this.getCurrent) } } 我一般是这样写的,就是会有一些样板代码
jaydenWang 楼主 初学 2025-12-24 10:34:46
@pakholeung372 思路很像,一开始也写过 this.store = create( () => ({ current: undefined, }), )
返回顶部