VueX和axios发布以前的数据以及来自新请求的数据

如何解决VueX和axios发布以前的数据以及来自新请求的数据

我在vuex商店中有一个postAsset操作,就像这样

async postAsset({dispatch},asset) {

  const f = await dispatch('srcToFile',asset);
  asset[0].files.fileList = f;
  const fileData = asset[0].files.fileList;
  const detailData = asset[0].detail;

  const fData = new FormData();
  fData.append('Name',asset[0].name);
  Object.keys(detailData).forEach((key) => {
    fData.append(`Detail.${key}`,detailData[key]);
  });
  for (var i = 0; i < fileData.length; i++) {
    fData.append('Files',fileData[i]);
  }
  await axios({
      method: 'post',url: 'https://localhost:5001/api/Assets',data: fData,headers: {
        'Content-Type': undefined
      }
    })
    .then(function(response) {
      console.warn(response);
    })
    .catch(function(response) {
      console.warn(response);
    });
}

它已成功发布到我的api后端和数据库中。 我遇到的问题是,在我发布第一篇文章后,它发布了以前的数据和新数据,但我不知道为什么要这样做。我确实将await添加到axios调用中,但这只是减慢了它的速度,它仍然在第一次发布之后两次发布,并且确定如果我继续发布它,它将继续将先前的发布一次又一次地发布到db中。我对所发生的事情不知所措,因此伸出援手寻求帮助,看看我能否解决此问题。

数据库中的外观示例

enter image description here

有人对我有任何建议,以便我可以解决此问题吗?我一次只能发布一件符合预期结果的物品。我已经检查了输入内容,并输入.prevent来阻止它们单击两次,但是我不认为这是..这就像是在保存数据并在每次添加新记录时一次将其全部重新发布。

更新:

调用动作的代码

populateAssets ({ dispatch },asset) {
  return new Promise((resolve) => {
  assets.forEach((asset) => {
  commit('createAsset',asset);
 );
dispatch('postAsset',asset);
resolve(true);
});
    },

填充资产填充列表,其中包含已完成的资产。

并且资产来自srcToFile方法 将文件转换为我可以发布的Blob

async srcToFile(context,asset) {
          const files = asset[0].files.fileList;
          let pmsArray = [];
          for (let f = 0; f < files.length; f++) {
              var data = files[f].data;
              let name = files[f].name;
              let mimeType = files[f].type;

             await fetch(data)
                  .then(function(res) {
                      const r = res.arrayBuffer();
                      console.warn('resource ',r);
                      return r;
                  })
                  .then(function(buf) {
                      console.warn('buffer: ',[buf]);
                      let file = new File([buf],name,{ type: mimeType });
                      pmsArray.push(file);
                  });
          }
         console.warn(pmsArray);
         return pmsArray;
     },

资产是我添加资产组件中的一个数组 资产结构

 name: '',detail: {
        category: '',manufacturer: '',model: '',serialNumber: '',purchasePlace: '',quantity: 1,acquiredDate: '',purchasePrice: '',currentValue: '',condition: '',assetLocation: '',retiredDate: '',description: ''
      },files: {
        fileList: []
      }

希望这可以帮助一些 整个商店文件

import Vue from 'vue'
import Vuex from 'vuex'
import { states } from '../components/enums/enums'
import { getField,updateField } from 'vuex-map-fields'
import axios from 'axios'


Vue.use(Vuex);
const inventory = {
  namespaced: true,strict: true,state: {
    assets: {
      items: []
    },categories: [],manufacturers: [],assetLocations: [],conditions: ['New','Fair','Good','Poor']
  },getters: {
    assetItems: state => state.assets.items,getAssetById: (state) => (id) => {
        return state.assets.items.find(i => i.id === id);
    },conditions: (state) => state.conditions,categories: (state) => state.categories,manufacturers: (state) => state.manufacturers,assetLocations: (state) => state.assetLocations
  },mutations: {
    createAsset (state,assets) {
        state.assets.items.push(assets);
    },createCategories (state,category) {
        state.categories.push(category);
    },createManufacturers (state,manufacturer) {
        state.manufacturers.push(manufacturer);
    },createLocations (state,locations) {
        state.assetLocations.push(locations);
    }
  },actions: {
    addToCategories ({ commit },categories) {
        commit('createCategories',categories);
    },addToManufacturers ({ commit },manufacturers) {
        commit('createManufacturers',manufacturers);
    },addToLocations ({ commit },locations) {
        commit('createLocations',locations);
    },populateAssets ({ dispatch },asset) {
        //return new Promise((resolve) => {
//        assets.forEach((asset) => {
//          commit('createAsset',asset);
//        });
            dispatch('postAsset',asset);
        //    resolve(true);
        //});
    },addAsset ({ dispatch,/*getters*/ },newAsset) {
        //let assetCount = getters.assetItems.length;
        //newAsset.id = assetCount === 0
        //    ? 1
        //    : assetCount++;
        dispatch('populateAssets',[newAsset]);
    },async srcToFile(context,async postAsset({ dispatch },asset) {
       const f = await dispatch('srcToFile',asset);
       asset[0].files.fileList = f;
       const fileData = asset[0].files.fileList;
       const detailData = asset[0].detail;

       const fData = new FormData();
       fData.append('Name',asset[0].name);
        Object.keys(detailData).forEach((key) => {
            fData.append(`Detail.${key}`,detailData[key]);
        });
       for (var i = 0; i < fileData.length; i++) {
           fData.append('Files',fileData[i]);
       }
     await axios({
               method: 'post',headers: { 'Content-Type': undefined }
           })
           .then(function(response) {
               console.warn(response);
           })
           .catch(function(response) {
               console.warn(response);
           });
   }
  }
};

const maintenance = {
  state: {
    backup: []
  },getters: {},mutations: {},actions: {}
};

const assetProcessing = {
  namespaced: true,state: {
    currentAsset: {
      id: 0,name: '',files: {
        fileList: []
      }
    },filePosition: -1,selectedItem: -1,state: states.view,isNewAsset: false
  },getters: {
    getField,getOpenAsset (state) {
      return state.currentAsset
    },getSelectedAsset: (state,getters,rootState,rootGetters) => (id) => {
      if (state.isNewAsset) return state.currentAsset
      Object.assign(state.currentAsset,JSON.parse(JSON.stringify(rootGetters['inventory/getAssetById'](!id ? 0 : id))));
      return state.currentAsset
    },appState: (state) => state.state,getCurrentPosition (state) {
      return state.filePosition
    },selectedAssetId: (state) => state.selectedItem
  },mutations: {
    updateField,setAsset (state,asset) {
      Object.assign(state.currentAsset,asset)
    },setFiles (state,files) {
      Object.assign(state.currentAsset.files,files)
    },newAsset (state) {
      Object.assign(state.isNewAsset,true)
      Object.assign(state.currentAsset,{
        id: 0,detail: {
          category: '',description: ''
        },files: {
          fileList: []
        }
      })
    },updateSelectedItem (state,id) {
        Vue.set(state,'selectedItem',id);
    },updateState (state,newState) {
        Vue.set(state,'state',newState);
    }
  },actions: {}
};

export const store = new Vuex.Store({
  modules: {
    inventory: inventory,maintenance: maintenance,assetProcessing
  }
})

network console

当用户单击表单上的“保存”按钮时,会调用

添加资产

addAsset () {
      this.$store.dispatch('inventory/addAsset',this.newAsset) <--- this calls add asset
      this.$store.commit('assetProcessing/updateState',states.view);<-- this closes the window
    },

解决方法

因此,经过大量调试后,我们发现事件总线多次触发,导致我们添加了过多的帖子

http://localhost:4200/employee/enrollments?number=189930097&city=Chicago

到AssetAdd.vue组件,它消除了过多的资产过账。 我要感谢@phil在此方面的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-