使用vuex后为什么a组件的数据没有响应更新?

想在B组件中提交数据然后在A组件中可以响应更新 我同时打开a、b两个页面观察 但是试了一下b提交后a并没有反应 也没任何报错 这是为什么?我在mutations的ADD里面alert(state.list) 每次添加后都能弹出最新的数据 但是A组件就是没有更新
目录结构
图片描述

A组件

<template>
   <div>
     <ul>
       <li v-for="(item, index) in list" :key=index>{{item}}</li>
     </ul>
   </div>
</template>

<script>
export default {
  name: 'A',
  computed: {
    list () {
      return this.$store.state.list
    }
  }
}
</script>

<style scoped>
</style>

B组件

<template>
  <div>
    <input type="text" v-model="msg">
    <button @click="add">添加</button>
  </div>
</template>

<script>
export default {
  name: 'B',
  data () {
    return {
      msg: ''
    }
  },
  methods: {
    add () {
      this.$store.dispatch('add', this.msg)
    }
  }
}
</script>

<style scoped>
</style>

store.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    list: ['a', 'b']
  },

  mutations: {
    ADD (state, msg) {
      state.list.push(msg)
    }
  },

  actions: {
    add (context, msg) {
      context.commit('ADD', msg)
    }
  }
})

export default store
阅读 3.9k
4 个回答

:key=index 错误

store.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
  state : {
    list: []
  },

  mutations : {
    ADD (state, msg) {
      state.list.push(msg)
    }
  },

  actions : {
    add (context, msg) {
      context.commit('ADD', msg)
    }
  }
})

export default store

clipboard.png
删掉其它store

clipboard.png

演示

clipboard.png

clipboard.png

你把b组建中的dispatch换为commit试一下

你这数据是异步拉取的还是同步的?

或许你的store应该全局引入

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题