Skip to content

清空 store 出现问题 #69

@dompling

Description

@dompling

Store.js

import { action, observable } from 'mobx-miniprogram';

export const userStore = observable({
  /** 用户信息 */
  userInfo: wx.getStorageSync(STORAGE_KEY.USER_INFO) || '',
  updateUserInfo: action(function (userInfo) {
    this.userInfo = userInfo;
    wx.setStorageSync("USER_INFO", userInfo);
  })})

1.账号 A: 登录成功获取到用户信息存储到 userInfo,个人中心显示的是 A 的信息

    this.storeBindings = createStoreBindings(this, {
      store: userStore,
      fields: ['userInfo'],
    });

2.当 A 账户切换到分包页面的时候,如果分包页面使用了 storeBindings 退出登录了,更新了 userInfo 为 ''

  storeBindings: {
    store: userStore,
    fields: ['userInfo'],
  },

3.账号 B:登录之后拿到的信息还是账号 A 的

登出部分代码:

export function loginOut(exit = true) {
  userStore.updateUserInfo('');
}

Storage 里面的值是最新的。主包界面,调用了userInfo 之后,进入到分包调用了之后就出现这样的问题了。

MobX 在多个组件/页面同时绑定同一个 observable 字段时,响应式追踪会混乱:

  • 第一个绑定:✅ 正常工作
  • 第二个绑定:⚠️ 可能工作
  • 第三个绑定:❌ 开始混乱
  • 第四个及以上:❌ 完全失效

将页面、自定义组件和 store 绑定有两种方式: behavior 绑定 和 手工绑定 。

页面使用了 behavior 绑定的时候会出现混乱,也就是步骤 2 的时候,测试中发现使用了 behavior的页面,就出现了上述现象。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions