简体   繁体   English

Vue.js - 向存储中的对象添加或设置新数据

[英]Vue.js - Add or set new data to object in store

I'm trying to add or update an object to store with Vuex.我正在尝试添加或更新要使用 Vuex 存储的对象。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    userData: {}
  },
  mutations: {
    ADD_USER_DATA: (state, data) => {
      state.userData.push(data)
    }
  }
})

This returns state.userData.push is not a function.这返回state.userData.push不是函数。

And in the components:在组件中:

<template>
  <div>
    <input type="date" v-model="inputData.date1">
    <input type="date" v-model="inputData.date2">
    <input type="number" v-model="inputData.date3">
    <button @click="submitForm">Submit</button>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex'

export default {
  data () {
    return {
      inputData: {}
    }
  },

  computed: {
    ...mapState([
      'userData'
    ])
  },

  methods: {
    ...mapMutations([
      'ADD_USER_DATA'
    ]),
    submitForm () {
      this.ADD_USER_DATA(this.inputData)
    }
  }
}
</script>

Later on I want to update userData with a value from other component, so that it impacts both components.稍后我想用其他组件的值更新userData ,以便它影响两个组件。 I would like to have a nice way of adding, replacing, concating the old array with a new array.我想要一个很好的方法来添加、替换、连接旧数组和新数组。 I followed the example in this video .我按照本视频中的示例进行操作。

(FYI: I'm currently learning Vue.js from scratch and couldn't figure out this Vuex's mutations, actions...) (仅供参考:我目前正在从头开始学习 Vue.js,无法弄清楚这个 Vuex 的突变、动作……)

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // userData: {}
    userData: []
  },
  mutations: {
    ADD_USER_DATA: (state, data) => {
      state.userData.push(data)
    }
  }
})

You are trying to use a push method of Object.您正在尝试使用 Object 的push方法。 Object does not have a push method you should initiate userData value with Array [] or assign that data to the object对象没有 push 方法,您应该使用 Array []初始化userData值或将该数据分配给对象

if you need reactivity:如果您需要反应性:

mutations: {
  ADD_USER_DATA: (state, data) => {
    Object.keys(data).forEach( key => {
      Vue.set(state.userData, key, data[key])
    })
  }

I've ended up using Object.assign method.我最终使用了Object.assign方法。

  mutations: {
    ADD_USER_DATA: (state, data) => {
      // state.userData.assign(data)
      state.userData = Object.assign({}, data)
    }
  }

Try it尝试一下

 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { userData: {} }, mutations: { ADD_USER_DATA: (state, data) => { state.userData.date1 = data.date1 state.userData.date2 = data.date2 } } })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM