vuex中state改变但是没有进行渲染

发布于 2022-09-12 01:55:16 字数 2098 浏览 20 评论 0

这是store.js中的Mutations

const mutations = {
  //用户是否登陆跳转的flag的事件
  setChangeHome: function (state) {
    state.islogin.flag = true;
  }
};
const getters = {
  islogin: function () {
    return state.islogin.flag
  }
};
const state = {
  islogin: {
    flag: false
  },
  shopper: {
    name:'',
    id:''
  }
};
const mutations = {
  //用户是否登陆跳转的flag的事件
  setChangeHome: function (state) {
    state.islogin.flag = true;
  },
  setUserInfo: function (state, logInfo) {
    state.shopper.shopperId = logInfo.id;
    state.shopper.shopperCode = logInfo.pwd;
    state.shopper.shopperName = "模拟商户";
    console.log('登陆成功', logInfo);
  }
};
const actions = {
  subMitUserLogin: function ({
    commit
  }, logInfo) {
    return new Promise((resolve, reject) => {
      //console.log(logInfo);
      //先做一个死判断,搭起Vuex的框架
      //这里以后是一个异步的Promise回调。
      //异步用axios做
      if () {
        //登陆成功
        //存入state
        commit('setUserInfo', logInfo);
        resolve();
      } else {
        reject();
      }
    });
  }
};

login.vue:

 data() {
    return {
      logInfo: this.$store.state.shopper
    };
  },

我在login.vue中使用 store.dispatch 来验证用户登陆。
在登陆成功以后我使用 store.commit('setChangeHome') 来改变state中 isloginflag 状态。

我的问题是

  1. login.vue 中,我验证了用户的登陆,然后改变了stateshopper 对象,在此组件中是可以进行自动渲染的(请注意我的对象赋值方式)logInfo: this.$store.state.shopper,同时也改变了 islogin 的状态。但是在 enyrt.vue中,为什么不能渲染呢?组件并没有因为state改变而被渲染。

    <login v-if="!islog"></login>
    
    data:function(){
       return {
         islog:this.$store.state.islogin.flag
       }

2. maGetters到底是什么。为什么这样写就可以渲染了。computed:mapGetters(['islogin'])
3. 两种写法或者说两种思路或者说两种实现方式为什么一个可以一个不可以?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

同展鸳鸯锦 2022-09-19 01:55:16

只要shopper的引用不变,它就不会渲染,而mapGetter我猜它应该是进行了深度监听,除了引用,也监听属性值,这个要去看mapgetter源码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文