vue2迁移vue3之setup选项:快速入门

vue2迁移vue3之setup选项:快速入门

单文件组件*.vue中,script标签的内容

<script>
import childrenCom from './childrenCom.vue'
export default {
  name: "componentName",
  components: {
    childrenCom,
  },
  props: {
    titleProps: {
      type: String,
      default: "",
    },
    valuesProps: {
      type: Object,
      default: () => ({}),
    },
  },
  computed: {
    computedValue() {
      let res = this.titleProps + "xxx";
      return res;
    },
  },
  data() {
    // tableHeadLabel是非响应数据
    this.tableHeadLabel = [
      {
        title: "姓名",
        key: "name",
      },
      {
        title: "年龄",
        key: "age",
      },
    ];
    return {
      dataStr: "",
      dataNum: "",
      dataArr: [],
      dataObj: {
        searchWord: undefined,
        state: undefined,
        pageSize: 10,
        pageNo: 1,
      },
      dataTotal: 0,
      listData: [],
    };
  },
  created() {
    this.functionInCreate();
  },
  mounted() {
    this.functionInMounted();
  },
  methods: {
    // html模板中用到的函数
    functionInTemplate() {},

    // html模板中不用到的函数
    functionNotInTemplate() {
      console.log(this.dataStr);
    },

    // created生命周期调用的函数
    functionInCreate() {
      this.functionNotInTemplate();
    },

    // mounted生命周期调用的函数
    functionInMounted() {},
  },
};
</script>

改为:setup选项

<script>
import { reactive, computed, toRefs, onMounted } from "vue";
import childrenCom from './childrenCom.vue'
export default {
  name: "componentName",
  components: {
    childrenCom,
  },
  props: {
    titleProps: {
      type: String,
      default: "",
    },
    valuesProps: {
      type: Object,
      default: () => ({}),
    },
  },
  setup(props,ctx) {
  //功能1 :把一个功能模块写在一个函数里,这样,可以抽到独立的文件里,符合 Compsition API理念
   const part1=function(props,ctx){
    //  props数据,直接用参数props直接代替this,即可
    let computedValue = computed(() => {
      let res = props.titleProps + "xxx";
      return res;
    });

    // tableHeadLabel是非响应数据
    const tableHeadLabel = [
      {
        title: "姓名",
        key: "name",
      },
      {
        title: "年龄",
        key: "age",
      },
    ];
    // 用reactive函数包裹原vue2的data选项return的对象
    // 然后在各个方法中,用data代替this,来应用对应的响应数据,即可
    //所有变量用一个reactive定义,减少定义变量的次数,同时,避免某些响应式数据被赋值后导致响应式丢失的问题
    //对于非响应式数据,直接定义变量即可
    //对特殊的数据(只读/浅相应)
    const dataOpt = reactive({
      dataStr: "",
      dataNum: "",
      dataArr: [],
      dataObj: {
        searchWord: undefined,
        state: undefined,
        pageSize: 10,
        pageNo: 1,
      },
      dataTotal: 0,
      listData: [],
    });
    
    // html模板中用到的函数 不用表达式,这样,避免在调用函数时要时刻关注函数定义的顺序
    function functionInTemplate() {};

    // html模板中不用到的函数
    function  functionNotInTemplate() {
      // 在各个方法中,用data代替this,来应用对应的响应数据,即可
      console.log(data.dataStr);
    };

    // created生命周期调用的函数
    // 直接调用即可
    function  functionInCreate () {
      // html模板中不用到的函数
      // 在引用的地方,把this引用前缀去掉,即可
      functionNotInTemplate();
    };
    functionInCreate();

    // mounted生命周期调用的函数
    // 直接使用onMounted钩子函数,放入回调函数即可
   function  functionInMounted(params){};
    onMounted(() => {
      functionInMounted("xxx");
    });
     // setup函数return的对象,
    // 只包含在html模板中使用到的变量和方法,即可
      return  {
           computedValue,
           // toRefs函数可以把响应式数据最外层结构去掉,
           // 同时保持各个子属性仍是响应式的,
           // 即达到vue2中data选项的响应效果
           ...toRefs(dataOpt),
           functionInTemplate,
           tableHeadLabel,
        };
    }
    
    const part2=function(props,ctx){
      return {}
    }
    
    return {
       ...part1((props,ctx)),
       ...part2((props,ctx)),
       }
  },
};
</script>

组合Api–setup

由于setup函数会把顶层的绑定会被暴露给html模板,即在html模块版中,都是直接可以使用的,不再需要显式导出到html模板中

<script>
export default {
  name: "componentName",
};
</script>

<script setup>
import { reactive, computed, toRefs, onMounted } from "vue";
import childrenCom from "./childrenCom.vue";
// 在 <script setup> 中必须使用 defineProps 和 defineEmits API 来声明 props 和 emits ,
// 它们具备完整的类型推断并且在 <script setup> 中是直接可用的:
const props = defineProps({
  titleProps: {
    type: String,
    default: "",
  },
  valuesProps: {
    type: Object,
    default: () => ({}),
  },
});
// 显式声明需要触发的自定义事件名
const emit = defineEmits(["changeName", "deleteName"]);

//  props数据,直接用参数props直接代替this,即可
let computedValue = computed(() => {
  let res = props.titleProps + "xxx";
  return res;
});

// tableHeadLabel是非响应数据
const tableHeadLabel = [
  {
    title: "姓名",
    key: "name",
  },
  {
    title: "年龄",
    key: "age",
  },
];
// 用reactive函数包裹原vue2的data选项return的对象
// 然后在各个方法中,用data代替this,来应用对应的响应数据,即可
const data = reactive({
  dataStr: "",
  dataNum: "",
  dataArr: [],
  dataObj: {
    searchWord: undefined,
    state: undefined,
    pageSize: 10,
    pageNo: 1,
  },
  dataTotal: 0,
  listData: [],
});

// html模板中用到的函数
function functionInTemplate(){};

// html模板中不用到的函数
function functionNotInTemplate() {
  // 在各个方法中,用data代替this,来应用对应的响应数据,即可
  console.log(data.dataStr);
};

// created生命周期调用的函数
// 直接调用即可
function functionInCreate()  {
  // html模板中不用到的函数
  // 在引用的地方,把this引用前缀去掉,即可
  functionNotInTemplate();
};
functionInCreate();

// mounted生命周期调用的函数
// 直接使用onMounted钩子函数,放入回调函数即可
function functionInMounted(params) {};
onMounted(() => {
  functionInMounted("xxx");
});

// setup函数return的对象,
// 只包含在html模板中使用到的变量和方法,即可
let { dataStr, dataNum, dataArr, dataObj, dataTotal, listData } = toRefs(data);

</script>

此外,日志打印技巧

vue3使用代理后,打印数据后,查看时,特别不方便,此时可以这样做:F2
在这里插入图片描述
然后找到:
在这里插入图片描述
此时,查看打印的数据,就很清爽了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Vue 2项目快速重构为Vue 3,你可以按照以下步骤进行操作: 1. 更新Vue和相关依赖:首先,确保你的项目中使用的Vue版本是2.6以上。然后,将Vue的版本升级到3.x.x,并更新相关依赖,如Vue Router和Vuex等。 2. 迁移构建工具:Vue 3使用了新的构建工具Vite,如果你的项目还在使用旧的构建工具(如Webpack或者Vue CLI 2),你需要迁移到Vite或者Vue CLI 3+。 3. 迁移组件选项Vue 3对组件选项进行了一些更改,例如`data`属性现在需要改为使用`setup()`函数。你需要更新组件选项以适应Vue 3的新语法。 4. 迁移全局 API:Vue 3对全局 API 进行了一些更改和删除。例如,`Vue.directive()`现在应该改为`app.directive()`来注册指令。你需要查看Vue 3文档,了解全局 API 的更改,并相应地更新你的代码。 5. 迁移生命周期钩子:Vue 3对生命周期钩子进行了一些更改。例如,`beforeCreate`和`created`钩子被合并为一个新的`setup()`函数。你需要将旧的生命周期钩子迁移到新的`setup()`函数中。 6. 迁移响应式数据:Vue 3引入了新的响应式系统,使用`ref`和`reactive`来替代Vue 2中的`data`和`computed`。你需要将旧的响应式数据迁移到新的语法。 7. 迁移模板语法:Vue 3对模板语法进行了一些更改和增强。你需要查看Vue 3的模板语法文档,并更新你的模板代码以适应新的语法。 8. 迁移过渡与动画:Vue 3对过渡与动画的实现方式进行了一些更改。你需要查看Vue 3的过渡与动画文档,并相应地更新你的过渡与动画代码。 请注意,进行重构时,建议先阅读Vue 3的官方文档,了解详细的更改和迁移指南。此外,将项目拆分为多个小步骤,并使用版本控制系统(如Git)来跟踪更改,以便于回滚和排查问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值