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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions