vue3遇到的问题和代码优化

74 阅读1分钟

问题

import { ref, reactive, computed } from "vue";
let list = reactive([]);

const listFn = () => {
  getorderList({ status: 0.value, count: 0 }).then((res) => {
    if (res.data.code == 200) {
      list = res.data.data;
    }
  });
};

直接使用list = res.data.data对list修改 会导致在首次渲染页面没有数据 原因:因为 list直接赋值新数组会导致list的空间指针指向的不是同一个空间所以丢失了双向数据绑定 可以修改成下面的方法就不会丢失了

import { ref, reactive, computed } from "vue";
let list = reactive([{arr:[]);

const listFn = () => {
  getorderList({ status: 0.value, count: 0 }).then((res) => {
    if (res.data.code == 200) {
      list.arr = res.data.data;
    }
  });
};

优化

const status = (v) => {
  if (v==1) {
    return '已完成'
  }else if (v==2) {
    return '已完成'
  }else if (v==3) {
    return '已退款'
  }else if (v==4) {
    return '已取消'
  }
}

上面这种写法比较繁冗 可以修改成下面这种方法 另外使用了 computed 计算属性 computed:当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值。computed里面是不能传参的,所以用了两个return

import { computed } from "vue";

const statusFn = computed(() => {
  return (v) => {
    return {
      1: "已完成",
      2: "未知",
      3: "已退款",
      4: "已取消",
    }[v];
  };
});