Vue.js 在Nuxt.js中使用Vuex有点麻烦

Vue.js 在Nuxt.js中使用Vuex有点麻烦,vue.js,nuxt.js,vuex,Vue.js,Nuxt.js,Vuex,我有一个简单的疑问,就是我不知道为什么这个方法有效: store/topics.js export const state = () => ({ list:[] }) import slugify from "limax" export const mutations = { ADD_TOPIC(state, title, subtitle){ state.list.push({ title, subtitle, i

我有一个简单的疑问,就是我不知道为什么这个方法有效:

store/topics.js

export const state = () => ({
  list:[]
})

import slugify from "limax"
export const mutations = {
  ADD_TOPIC(state, title, subtitle){
    state.list.push({
      title,
      subtitle,
      id: Date.now(),
      ...
    })
  },
...
export const state = () => ({
  list:[]
})

export const mutations = {
  ADD_TOPIC(state, topic){
    state.list.push(topic)
  },
...
topics/new.vue

import {mapMutations} from 'vuex'
export default {
  data(){
    return {
      title: '',
      subtitle: '',
    }
  },
  methods: {
    addTopic(title, subtitle){
      this.$store.commit('topics/ADD_TOPIC', title, subtitle)
    },
...
import {mapMutations} from 'vuex'
export default {
  data(){
    return {
      topic: {
        title: '',
        subtitle: '',
        id: Date.now(),
        ...
      }
    }
  },
  methods: {
    addTopic(topic){
      this.$store.commit('topics/ADD_TOPIC', topic)
    },
...
但这不起作用:

store/topics.js

export const state = () => ({
  list:[]
})

import slugify from "limax"
export const mutations = {
  ADD_TOPIC(state, title, subtitle){
    state.list.push({
      title,
      subtitle,
      id: Date.now(),
      ...
    })
  },
...
export const state = () => ({
  list:[]
})

export const mutations = {
  ADD_TOPIC(state, topic){
    state.list.push(topic)
  },
...
topics/new.vue

import {mapMutations} from 'vuex'
export default {
  data(){
    return {
      title: '',
      subtitle: '',
    }
  },
  methods: {
    addTopic(title, subtitle){
      this.$store.commit('topics/ADD_TOPIC', title, subtitle)
    },
...
import {mapMutations} from 'vuex'
export default {
  data(){
    return {
      topic: {
        title: '',
        subtitle: '',
        id: Date.now(),
        ...
      }
    }
  },
  methods: {
    addTopic(topic){
      this.$store.commit('topics/ADD_TOPIC', topic)
    },
...

在第二种情况下,当我推一个主题时,它在数组中被正确推。。。但是,当我添加下一个对象时,它就像一个复制对象:S,当我在输入中写入某些内容时,会更新数组中所有复制的对象。

我猜这是因为它们都是相同的对象。请尝试
this.$store.commit('topics/ADD_TOPIC',{…TOPIC})
这将在您每次提交时发送新对象。根据您之前的评论,我希望您在使用时更加小心。这是一个肤浅的克隆。我想这是因为它们都是相同的物体。请尝试
this.$store.commit('topics/ADD_TOPIC',{…TOPIC})
这将在您每次提交时发送新对象。根据您之前的评论,我希望您在使用时更加小心。这是一个肤浅的克隆。查看更多