westore icon indicating copy to clipboard operation
westore copied to clipboard

如果实现状态共享呢?

Open JslinSir opened this issue 2 years ago • 9 comments

A,B两个页面

A 页面的登录态,需要B页面 登录刷新

A 有自己的model B 也有自己的model ,

看了源码,绑定的 view id 会做自增长,view的状态更新没法共享

JslinSir avatar Sep 28 '21 08:09 JslinSir

store 里可以 import 多个 model 组合。比如假设 登录态信息在 user model 里,a 页面的 store 和 b 页面的 store 都可以使用 user model

这里可以看到 store 可以组合 model https://github.com/Tencent/westore/blob/master/packages/westore-example/stores/other-store.js#L3-L4

dntzhang avatar Sep 28 '21 09:09 dntzhang

每次new 出来的 model 实例 都是一个新的变量,之前绑定的 model 不会随之改变的

想知道,a 页面的 store如何 根据 b页面的 store 触发时候得到更新

JslinSir avatar Sep 29 '21 03:09 JslinSir

1.你可以先new 出来再import到 各个store

2.westore 没有斩断 store 之间的通讯吧,这个可以开发者自己组织依赖关系、发布订阅什么的。

model之间可以多对多互相依赖,store之间可以多对多互相依赖,model和store之间可以多对多互相依赖。

westore只是斩断model和view之间的依赖。

dntzhang avatar Sep 29 '21 03:09 dntzhang

好的,谢谢👍🏻

这种组织结构非常棒

JslinSir avatar Sep 29 '21 03:09 JslinSir

不同页面之间同一个model 。data不更新,

JaimeCheng avatar Nov 04 '21 07:11 JaimeCheng

参考这个库我自己另外实现一个状态管理 https://gist.github.com/SakuOtonashi/c98aa31d2b5fdc82ba0bcdb1eb8e07cd 强化了Store的作用:Store和页面/组件是多对多绑定,绑定时指定属性名用来隔离多个Store绑定在同一个页面/组件上命名冲突。

Page({
  data: {
    stateData: stateStore.data,
  },
  onLoad() {
    this._ssViewId = stateStore.connectAndUpdate('stateData', this)
  },
  onUnload() {
    stateStore.disconnect(this._ssViewId)
  },
  getUnreadCount() {
    stateStore.getUnreadMessageCount()
  },
})

SakuOtonashi avatar Nov 16 '21 11:11 SakuOtonashi

“想知道,a 页面的 store如何 根据 b页面的 store 触发时候得到更新” 同想知道。下面大神的回答我不太清楚,请问您是怎样解决的呢

lidesheng111 avatar Dec 16 '21 08:12 lidesheng111

如果是tabbar页面的话,页面A,B使用同一个store,此时数据无法同步更新

Elio204557140 avatar Jun 28 '22 09:06 Elio204557140

好的,谢谢👍🏻

这种组织结构非常棒

请问,这里你是怎么处理的

nanhupatar avatar May 08 '23 09:05 nanhupatar