vue3和ts的使用

一. setup

变量不在写在data里面, 反而在setup内写。

<scriptlang="ts">
import { defineComponent, ref } from "vue";
export default defineComponent({
  name: "App",
  setup() {
    const girls = ref(["大脚", "刘英", "晓红"]);
    const selectGirl = ref("");
    const selectGirlFun = (index: number) => {
      selectGirl.value = girls.value[index];
    };
    //因为在模板中这些变量和方法都需要条用,所以需要return出去。
    return {
      girls,
      selectGirl,
      selectGirlFun,
    };
  },
});
</script>
  • ps:

  1. 使用ref定义字符串,数组等变量值;

  1. 变量赋值需要使用.value;

二. reactive

<scriptlang="ts">
import { ref, reactive } from "vue";
export default {
 name: "App",
 setup() {
   const data = reactive({
     girls: ["大脚", "刘英", "晓红"],
     selectGirl: "",
     selectGirlFun: (index: number) => {
       data.selectGirl = data.girls[index];
     },
   });

   return {
     data,
   };
 },
};
</script>
  • ps:

  1. reactive 接收对象。

  1. 使用时需要使用data.girls方式使用;

三. 添加类型注释

interfaceDataProps{
  girls:string[];
  selectGirl:string;selectGirlFun:(index:number)=>void;}

cosnt data: DataProps =reactive({
      girls:["大脚","刘英","晓红"],
      selectGirl:"",selectGirlFun:(index:number)=>{
        data.selectGirl = data.girls[index];},});

四. toRefs()

import{ reactive, toRefs } from "vue";
export default {
  name:"App",setup(){// const girls = ref(["大脚", "刘英", "晓红"]);// const selectGirl = ref("");// const selectGirlFun = (index: number) => {//   selectGirl.value = girls.value[index];// };constdata: DataProps =reactive({
      girls:["大脚","刘英","晓红"],
      selectGirl:"",
      selectGirlFun:(index: number)=>{data.selectGirl =data.girls[index];},});const refData =toRefs(data);return{...refData,};},};
  • ps:

  1. 解决了在template中必须使用data.girls的方式使用变量, 现在可以直接使用变量名称了;

五. 钩子

import{
  reactive,
  toRefs,
  onMounted,
  onBeforeMount,
  onBeforeUpdate,
  onUpdated,}from"vue";<scriptlang="ts">

//....
const app = {
  name: "App",
  setup() {
    console.log("1-开始创建组件-----setup()");
    const data: DataProps = reactive({
      girls: ["大脚", "刘英", "晓红"],
      selectGirl: "",
      selectGirlFun: (index: number) => {
        data.selectGirl = data.girls[index];
      },
    });
    onBeforeMount(() => {
      console.log("2-组件挂载到页面之前执行-----onBeforeMount()");
    });

    onMounted(() => {
      console.log("3-组件挂载到页面之后执行-----onMounted()");
    });
    onBeforeUpdate(() => {
      console.log("4-组件更新之前-----onBeforeUpdate()");
    });

    onUpdated(() => {
      console.log("5-组件更新之后-----onUpdated()");
    });

    const refData = toRefs(data);

    return {
      ...refData,
    };
  },
};
export default app;
</script>
  • ps

  1. 生命周期需要引用

  1. 什么周期需要卸载setup内

  1. 都是以on开头。

  1. 变化: BeforeDestroy变成了onBeforeUnmountdestroyed变成了onUnmounted

生命周期对比


Vue2--------------vue3
beforeCreate  ->setup()
created       ->setup()
beforeMount   -> onBeforeMount
mounted       -> onMounted
beforeUpdate  -> onBeforeUpdate
updated       -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed     -> onUnmounted
activated     -> onActivated
deactivated   -> onDeactivated
errorCaptured -> onErrorCaptured

六. watch

watch([overText, data.selectGirl],(newValue, oldValue)=>{console.log(`new--->${newValue}`);console.log(`old--->${oldValue}`);
      document.title = newValue[0];//返回的newValue也是一个数组});
  1. teleport

可以定义绑定到dom内;

<template><teleportto="#modal"><divid="center"><h2>JSPang11</h2></div></teleport></template>
<divid="app"></div><divid="modal"></div>
  1. 使用vuex

const store =useStore();constdata={
            startTime: store.state.startTime,
            endTime: store.state.endTime,
            projectId: store.state.projectId
        }

          store.commit('data',data)
  1. 事件


  setup(props, context) {

            context.emit('onShow', userId) 
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在你的Vue3项目安装ECharts库。可以通过以下命令使用npm进行安装: ``` npm install echarts --save ``` 接下来,你需要在你的Vue3组件引入ECharts库,并且在 `mounted` 钩子函数初始化ECharts实例和数据。具体操作如下: ```vue <template> <div id="pie-chart" style="width: 600px; height: 400px;"></div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import * as echarts from 'echarts'; export default defineComponent({ mounted() { // 初始化echarts实例 const pieChart = echarts.init(document.getElementById('pie-chart') as HTMLDivElement); // 饼图数据 const data = [ { value: 335, name: '直接访问' }, { value: 310, name: '邮件营销' }, { value: 234, name: '联盟广告' }, { value: 135, name: '视频广告' }, { value: 1548, name: '搜索引擎' }, ]; // 饼图配置项 const option = { title: { text: '饼图示例', left: 'center', }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)', }, legend: { orient: 'vertical', left: 10, data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'], }, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center', }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold', }, }, labelLine: { show: false, }, data, }, ], }; // 使用刚指定的配置项和数据显示图表 pieChart.setOption(option); }, }); </script> ``` 以上代码,我们在template添加了一个div元素,用于渲染饼图。在script,我们通过 `import` 关键字引入了ECharts库,并使用 `echarts.init` 方法初始化一个ECharts实例,然后根据需要配置饼图的数据和配置项,最后使用 `setOption` 方法将数据和配置项应用到ECharts实例,以显示饼图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值