状态对 Vuex 没有反应

Posted

技术标签:

【中文标题】状态对 Vuex 没有反应【英文标题】:State not reactive with Vuex 【发布时间】:2021-02-21 03:10:40 【问题描述】:

当我单击时,我试图在 Vuex 中减少或增加购物车,但直到我重新渲染组件或在 Vue 的开发工具中再次单击“提交”后,更改才会反映出来。

我的商店是什么样子的:

状态
state: 
  toggleSideBar: false,
  cart: [],
,
动作
action:
  incrementCart: ( commit , payload) => 
  commit("INCREMENT_CART", payload);
,
 addToCart: ( commit, state , payload) => 
      commit("ADD_TO_CART", payload);
    ,

突变
mutation:
INCREMENT_CART(state, payload) 
  let index = state.cart.findIndex((x) => x.id === payload);
  state.cart[index].amount += 1;
,
  ADD_TO_CART(state, payload) 
      let amount = 1;
      if (state.cart.length === 0) 
        payload.amount = amount;
        return state.cart.push(payload);
       else 
        if (state.cart.some((cart) => cart.id === payload.id)) 
          let index = state.cart.findIndex((x) => x.id === payload.id);
          state.cart[index].amount += amount;
         else 
          payload.amount = amount;
          state.cart.push(payload);
        
      
    ,


然后在我的组件中
computed: 
  cartData() 
    return this.$store.state.cart;
    console.log(this.$store.state.cart);
  ,

然后将值作为道具传递给单个购物车

【问题讨论】:

carData() 是在计算中还是在方法中?你能把更多的代码格式化吗? 请检查这个答案***.com/questions/63404747/… 您遇到了反应性问题:如果 index 的商品在购物车中不存在,那么您不能这样设置:您需要使用 Vue.set Vue.set(state.cart, index, ...state.cart, amount : state.cart.amount +1) @robert 这会发生突变吗?如果是,我做了并且仍然得到相同的结果;我还在上面的问题中添加了新项目,关于 ADD_TO_CART 突变,也许这可能是我问题的根源 【参考方案1】:

你需要像这样在你的 Vuex 中创建一个 getter:

getters: 
    getCart(state) 
        return state.cart;
    

然后在您的计算中,您需要像这样调用您的 getter:

import  mapGetters  from 'vuex';

export default 
    
    computed: 
        ...mapGetters(['getCart']);
    

最后在你的 html 标签中,你需要像这样调用你的 getter:

<div v-for="item in getCart">item.quantity</div>

【讨论】:

以上是关于状态对 Vuex 没有反应的主要内容,如果未能解决你的问题,请参考以下文章

Vuex getter 在模块内部时没有反应

无法通过getter vuex vuejs访问状态

来自 sessionStorage 的对象在 vuejs / vuex 中没有反应

在 Vuex 状态中使用 Map

为啥即使我没有将 vuex 状态绑定到任何 html 输入元素,我的 vuex 状态也会在更改组件级别状态时发生变化?

尽管状态更新,为啥 vuex 组件没有更新?