[前端][vue]异步操作中无法修改state的属性

mutation 必须同步,任何异步只能出现在 action 里。

缘起:

 // 更新操作
      ClueLibApi.reportClueRecord(param)
        .then(rs => {
          clue.clueState = 1;
         
          this.$emit("reStatistics", "");
          this.$message({
            type: "success",
            message: "成功"
          });
        })
        .catch(e => {
          console.error(e);
          this.$alert(e || "出错");
        })
        .finally(() => this.setLoading(false));
    },

clue.clueState = 1;
这一行中,因为clue是来自一个datalist中的数据,在el-table中被循环获取,然后在clue对象中,cluestate是一个属性,但是这些都是vuex的属性。
而这上面的代码中,是异步进行的,异步进行中,不能进行vuex中属性的更改
解决办法:
在vuex中(xx-store.js)
定义方法:
setClueState(state,clueId){
let clueReportStatus = state.clueList.filter((c)=>c.clueId === clueId)
if(clueReportStatus && clueReportStatus.length){
clueReportStatus[0].clueState = 1;
}
}
然后在上面代码把,把clue.clueState = 1;
替换为:
this.setClueState(clue.id);
 
ps: 别忘了增加
methods: {
...mapActions(STORE_NAME_SPACE_CLUE_LIB, ["loadData"]),
...mapMutations(STORE_NAME_SPACE_CLUE_LIB, [
"其它方法",
"setClueState"
]),
其它解析:

this.setClueState(clue.id);中的this,就是把通过mapMutations,把方法映射为本文件使用,

关于获取list中某个符合条件的数据对象,使用lambda表达式

 

转载于:https://www.cnblogs.com/stevenlii/p/9489098.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值