练习vuex:踩坑——初始值设为0

  • Post author:
  • Post category:vue


 watch: {
    actualTransfer: {
      handler(n) {
        if (n || n === 0) {
          console.log(n, "qqqqqqqqq");
          // this.option.series[0].data[0][1] = this.actualTransfer;
          this.$set(this.option.series[0].data[0], 1, this.actualTransfer);
          console.log(this.option.series[0].data[0][1], "22222");
        }
      },
      deep: true,
      immediate: true,
    },
    notTransfer: {
      handler(n, o) {
        if (n || n === 0) {
          console.log(n, "wwwwwwwwwwwwwwwwwww");
          // this.option.series[0].data[1][1] = this.notTransfer;
          this.$set(this.option.series[0].data[1], 1, this.notTransfer);
          console.log(this.option.series[0].data[1][1], "111111");
          this.$nextTick(() => {
            this.init();
          });
        }
      },
      deep: true,
      immediate: true,
    },
  },
  computed: {
    actualTransfer() {//0
      return this.$store.state.fundsData.actualTransfer;
    },
    notTransfer() {
      return this.$store.state.fundsData.notTransfer;
    },
  },
  methods: {
    async initData() {
      let result = await requestApi.maintenanceFunds();
      if (result.data.data.code === 0) {
        var data = result.data.data.data;
        this.$store.commit(
          "fundsData/setActualTransfer",
          Number((Number(data.publicFixFundCircle.data[0][1]) / 10000).toFixed(2))
        );
        this.$store.commit(
          "fundsData/setNotTransfer",
          Number((Number(data.publicFixFundCircle.data[1][1]) / 10000).toFixed(2))
        );
        console.log(
          this.$store.state.fundsData.actualTransfer,
          this.$store.state.fundsData.notTransfer,
          "datadata"
        );

        /* this.$store.commit(
          "fundsData/setRealTransfer",
          Number(
            (Number(data.houseSalePriceTransferCircle.data[0][1]) / 10000).toFixed(2)
          )
        );
        this.$store.commit(
          "fundsData/setShouldTransfer",
          Number(
            (Number(data.houseSalePriceTransferCircle.data[1][1]) / 10000).toFixed(2)
          )
        ); */

        /* console.log(this.$store.state.fundsData.shouldTransfer,this.$store.state.fundsData.realTransfer,"nnnnnnnnn"); */
      }
    },

在这里插入图片描述

以上是更改后的代码(正确的)

datadata:是本页面请求完接口打印的store(正确)

store中初始值为 ‘ ’

在这里插入图片描述

在这里插入图片描述

以上两张图片是store中初始值为0的情况下

computed第一次会从store中获取值==0,且被watch监听到,此时接口还未请求完数据,均是默认值0,notTransfer中,n=0会执行代码,init方法会被执行

当请求完接口后,watch再一次监听到,但notTransfer中的new值就是0,不会执行,也不会重新init



将vuex中的初始值设为“”!!!

如果将其设为默认值,则会在第一次computer中和watch中执行,当请求到数据后,再次更新watch,会屏闪



vuex的持久化存储

import db from "@/utils/localstorage";

export default {
  namespaced: true,
  state: {
    // ids: ""
    ids: db.get("relatedIds")
  },
  mutations: {
    // 当第一次出发更新时,执行了save,但是state.ids是从state.ids = val;取得值,而不是loaclStroage
    setIds(state, val) {
      state.ids = val;
      db.save("relatedIds", val);
    }
  }
};

JSON.parse(localStorage.getItem(projectName + “_” + key))

得到的值的类型应该与存入时候的值的类型相同

,因为它是将存储在本地存储中的 JSON 字符串解析为 JavaScript 对象。如果存入时的值是一个 JavaScript 对象,则解析后得到的值也应该是一个 JavaScript 对象。但是如果存入时的值是一个字符串、数字或布尔值等基本数据类型,则解析后得到的值也应该是相应的基本数据类型。



版权声明:本文为fengyabin123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。