当前位置: 首页 > 知识库问答 >
问题:

VUEX-Transform存储项目两次,提交新项目,还是每次安装都在组件中进行转换?

夏侯弘量
2023-03-14

我想对单个大型存储项进行两个单独的转换,并将结果作为两个新的附加存储项提交回存储。即。

setEventsData: (state, data) => {...} // main huge master object
// do transformations on it then 
setGridData: (state, transformedEventsData) => {}
setCalendarData: (state, differentTransformedEventsData) => {}

我的想法是,我应该在app.js中进行转换,并将这些转换提交到新的存储项中,如上所示,因为我认为最好在页面加载时完成所有的转换,并在mapState中读取转换后的数据,而不是每次挂载到网格和日历组件中进行转换。这是好的推理吗?

我做错了,因为在转换本地副本的过程中,原始store项State.EventsData在某个地方不断被损坏。(请参阅下面的transformCalendarData()和transformGridData()方法。我不知道为什么会修改EventsData,或者这是否是最好的方法。

setEventsData突变和加载操作

    mutations: {
      setEventsData: (state, data) => {
        state.eventsData = data;
        localStorage.setItem("eventsData", JSON.stringify(data));
      },
    }
    loadData({ commit }) {
      axios
        .get("/data/eventsData.json")
        .then((response) => {
          commit("setEventsData", response.data);
          commit("setLoading", false);
        })
        .catch((error) => {
          console.log(error);
        });
    },

应用程序JS

<template>
  <div id="app">
    <router-view />
  </div>
</template>
<script>
import state from "./store/index";
import { mapState } from "vuex";

export default {
  name: "App",
  data() {
    return {
      calendarData: [],
      gridData: [],
    };
  },
  computed: mapState(["loading", "eventsData"]),
  beforeCreate() {
    state.commit("initializeStore");
  },
  created: function () {
    this.$store.dispatch("loadData");
    this.gridData = this.eventsData;
    this.calendarData = this.eventsData;
  },
  mounted() {
    this.transformDataForGrid();
    this.transformDataForCalendar();
  },
  methods: {
    transformDataForCalendar() {
      this.calendarData.forEach((event, i) => {
        delete event.artist_supporting;
        delete event.genre;
        delete event.venue;
        delete event.venue_city;
        delete event.venue_state;
        delete event.capacity;
        delete event.announce_date;
        delete event.onsale_date;
        delete event.promoter;
        delete event.business_unit;
        delete event.show_type;
        delete event.confirm_date;
        delete event.cancelled_date;
        delete event.status;

        event.venue_id = `event_${i}`;
        event.id = event.venue_id;
        event.title = event.artist_headliner;
        event.startDate = event.event_date;

        delete event.venue_id;
        delete event.artist_headliner;
        delete event.event_date;

        let date = new Date(event.startDate);
        let day = date.getDate();
        let month = date.getMonth() + 1;
        let year = date.getFullYear();
        if (day < 10) {
          day = "0" + day;
        }
        if (month < 10) {
          month = "0" + month;
        }
        event.startDate = year + "-" + month + "-" + day;
      });
      state.commit("setCalendarData", this.calendarData);
    },
    transformDataForGrid() {
      this.gridData.forEach((event) => {
        let date = new Date(event.event_date);
        let day = date.getDate();
        let month = date.getMonth() + 1;
        let year = date.getFullYear();
        if (day < 10) {
          day = "0" + day;
        }
        if (month < 10) {
          month = "0" + month;
        }
        event.event_date = year + "-" + month + "-" + day;
      });
      state.commit("setGridData", this.gridData);
    },
  },
};
</script>

共有1个答案

戎桐
2023-03-14

“我正在复制数据,但原始数据仍然被删除行和该函数的其余部分所改变”,即使复制了数据,也不能像这样删除它[https://stackoverflow.com/questions/34698905/how-can-i-clone-a-javascript-object-except-for-one-key][1]。您可以像下面这样删除它们:const{focus,editable,index,...rest}=a;然后根据需要使用rest。在您的情况下,它应该像:

const{artist_supporting,genre,venue,venue_city,keep going,...rest}=事件;然后,您可以根据需要使用rest返回它,将它放入一个变量中,等等。

 类似资料:
  • 本文向大家介绍解决idea每次新建项目都需要重新指定maven目录,包括了解决idea每次新建项目都需要重新指定maven目录的使用技巧和注意事项,需要的朋友参考一下 原因 每次使用idea新建项目,就会在默认的c盘下的一个maven仓库中下载jar包,可是我自己指定maven仓库不是这个。如何让idea在新建项目的时候使用自定义位置的maven目录来下载jar包呢,下面我会告诉你。 解决方案Fi

  • 本文向大家介绍解决pycharm每次新建项目都要重新安装一些第三方库的问题,包括了解决pycharm每次新建项目都要重新安装一些第三方库的问题的使用技巧和注意事项,需要的朋友参考一下 目前有三个解决办法,也是亲测有用的: 第一个方法: 因为之前有通过pycharm的project interpreter里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项目的python

  • 问题内容: 假设我有一个数组/要比较的事物列表。在我更熟悉的语言中,我会做类似的事情 这样可以确保我们只比较每对一次。在某些情况下,我正在对列表中包含的一堆对象进行碰撞检测。对于检测到的每个碰撞,将一个描述碰撞的小的“碰撞”对象添加到列表中,然后另一个例程循环循环以解决每个碰撞(取决于两个碰撞对象的性质)。显然,我只想报告每个碰撞一次。 现在,这样做的pythonic方式是什么,因为Python倾

  • 给定一个我想在这样的页面上排列的集合: 在ui中是否有某种技巧可以用来实现这一点:重复或使用其他技术,最好不要创建自定义组件?

  • 我使用的是lombok版本5.1.0 为什么每次都在构建应用程序时创建lombok.config文件。 就是为了阻止这一切?

  • 环境为Windows 7 64位,atom 1.0.5 atom可以正常使用,但不能安装任何软件包。 错误信息: 输出: