vuex 修改name时,list数组也被修改了

<template>
  <div>
    Getter Demo
    <div v-for="(item, index) in list" :key="index">
      {{ item }}
    </div>
    <button @click="changeList()">changeList</button>
  </div>
</template>

<script>
import { mapGetters, mapMutations } from "vuex";
export default {
  name: "getter-demo",
  computed: {
    ...mapGetters(["list", "name"]),
  },
  methods: {
    ...mapMutations(["setList", "setName"]),
    changeList() {
      this.list.push({ type: "custom" });
      this.setName("lisi");
    }
  },
};
</script>

<style lang="scss" scoped>
</style>
import { createStore } from "vuex";

export default createStore({
  state: {
    list: [
      { type: "brand" },
      { type: "img" },
      { type: "goodsWeek" },
      { type: "imageTextList" },
    ],
    name: "zhangsan",
  },
  getters: {
    list: (state) => state.list,
    name: (state) => state.name,
  },
  mutations: {
    setList(state, list) {
      state.list = list;
    },
    setName(state, name) {
      state.name = name;
    },
  },
  actions: {},
  modules: {},
});

当我修改 name 值并保存到 vuex 时,为什么 list 修改值在 vuex 中也被修改了?
我并没有调用 setList 方法

image.png

阅读 1.3k
1 个回答

this.list.push({ type: "custom" });这行代码改的,你改变了引用值

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