vue3.0(SFC(<script setup>))+Sass+TypeScript使用&报错记录&解决方案(持续记录,保持关注)

一、vue2.0通过echarts初始化dom实例的时候要使用this.$refs.domEle, 但是3.0发生了改变,需要在setup定义一个字段,在dom元素标签里定义跟setup里声明的变量同名的ref属性值,e.g: <div id="ryCharts" ref="chartDom" class="bcontent"></div>

<script setup lang="ts">
const chartDom = ref<HTMLElement | null>(null);
let myChart = echarts.init(chartDom.value); //这行代码会有ts验证的报错,但是不影响正常运行
</script>

报错信息如下:

    Argument of type 'HTMLElement | null' is not assignable to parameter of type 'HTMLElement'.
Type 'null' is not assignable to type 'HTMLElement'.

解决方案如下:

<script setup lang="ts">
  const chartDom = ref<HTMLElement | ''>('');
  let myChart = echarts.init(chartDom.value as HTMLElement); 
  //通过console会发现chartDom.value其实跟之前this.$refs.domEle拿到的值是一样的,都是元素信息;
  //ts是js的超集,它会验证数据格式,所以需要为它设置类型 HTMLElement.
</script>

二、子组件可以通过getCurrentInstance()获取父组件里的数据

//import
import { onMounted, getCurrentInstance } from 'vue'

//use 
const currentInstance = getCurrentInstance()

onMounted(() => {
  console.log(currentInstance?.parent)
})

三、事件总线(用于非父子组件通信):事件总线模式可以被替换为使用外部的、实现了事件触发器接口的库例如 mitttiny-emitter,这里使用tiny-emitter
1.install(下载)

npm install --save tiny-emitter

2.usage(使用)

// for js 
  const emitter = require('tiny-emitter/instance')

//接收事件
emitter.on('some-event', function (arg1, arg2, arg3) {
 //
});

//发送事件
emitter.emit('some-event', 'arg1 value', 'arg2 value', 'arg3 value');

参考链接:1. vue3.X迁移策略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容