首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用VUEX编辑VUE上的单击事件后的数据?

如何使用VUEX编辑VUE上的单击事件后的数据?
EN

Stack Overflow用户
提问于 2019-01-30 16:07:50
回答 1查看 358关注 0票数 0

我只想编辑和保存json的内容。

在下一个question之后,我使用深度克隆来克隆我的数据,并在计算对象中进行编辑,而不是将其发送到Vuex上的中心对象。

代码第一次工作,我可以编辑数据,然后按下编辑它更改数据.但如果我再试着编辑..。我知道错误了

Vue warn:在对观察者的回调中出错“函数() {返回this._data.$$state }":”错误: vuex不变异vuex存储状态之外的变异处理程序。“

component.js

代码语言:javascript
复制
<template>
  <div class="hello">
    <form @submit.prevent="saveForm();">
      <input type="text" v-model="contentClone.result" />
      <button type="submit">edit</button>
      <p>{{ contentClone.result }}</p>
    </form>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      content: {},
      contentClone: {}
    };
  },

  methods: {
    saveForm(event) {
      this.$store.dispatch("UPDATE_CONTENT", this.contentClone);
    }
  },

  beforeMount() {
    this.contentClone = JSON.parse(this.contentState);
  },

  computed: {
    contentState() {
      return JSON.stringify({ ...this.$store.getters["getContent"] });
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1,
h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

store.js

代码语言:javascript
复制
import {
  UPDATE_CONTENT
} from "../actions/user";
import Vue from "vue";

const state = {
  content: { result: "original content" },
  status: String,
  errorMessage: []
};

const getters = {
  getContent: state => state.content
};

const actions = {
  [UPDATE_CONTENT]: ({ commit }, payload) => {
    commit(UPDATE_CONTENT, payload);
  }
};

const mutations = {
  [UPDATE_CONTENT]: (state, payload) => {
    Vue.set(state, "content", payload);
  }
};

export default {
  state,
  getters,
  actions,
  mutations
};

我在上面的链接https://codesandbox.io/s/p7yppolw00中复制了错误

如果能够在保存组件后重新启动组件中的内容,我认为这可能会修复错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 16:23:27

您正在将一个对象this.contentClone保存为状态,它与input进一步绑定,这使得输入能够通过v-model直接对您的vuex存储进行更改,从而导致错误;一个简单的修复方法是在将它复制到vuex状态时克隆this.contentClone

代码语言:javascript
复制
saveForm(event) {
  this.$store.dispatch("UPDATE_CONTENT", JSON.parse(JSON.stringify(this.contentClone)));
}

或者IMO,更好的解决方案是将结果作为字符串来分配,而不是使用对象。参见工作示例:https://codesandbox.io/s/mmpr4745z9

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54444768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档