vue3学习日记二 setup语法糖

这篇博客详细介绍了Vue3中的setup语法糖,包括基本语法、如何在顶层声明的变量直接用于模板、创建响应式数据的最佳实践、组件的使用、defineProps和defineEmits的解释,以及顶层await和Suspense的结合应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本语法

<script setup>
console.log('hello script setup')
</script>

2.顶层的绑定会暴露给模板,即在顶层声明的变量可以直接给tempalte使用

<script setup>
// 变量
const msg = 'Hello!'

// 函数
function log() {
  console.log(msg)
}
</script>

<template>
  <div @click="log">{{ msg }}</div>
</template>



//import 导入的方法也可直接在模板中使用,无需在methods中暴露

<script setup>
import { capitalize } from './helpers'
</script>

<template>
  <div>{{ capitalize('hello') }}</div>
</template>

3. 创建响应式数据    最好只是用一种 ref + toRefs,以免代码过于混乱

<script setup>
import { ref,reactive,toRefs,toRef } from 'vue'

const count = ref(0)  //声明基本数据类型

const obj=reactive({  //声明对象
    name:'222',
    age:22
})

const {name,age} =toRefs(obj) //解构对象将对象中的所有值变成响应式数据

const name =toRef(obj,'name')// 结构对象中的某个值变成响应式数据
</script>

4.使用组件

<script setup>
import MyComponent from './MyComponent.vue'
</script>

<template>
  <MyComponent />
</template>


//动态使用组件
<script setup>
import Foo from './Foo.vue'
import Bar from './Bar.vue'
</script>

<template>
  <component :is="Foo" />
  <component :is="someCondition ? Foo : Bar" />
</template>

5.defineProps和defineEmits

//子组件
<script setup>
const props = defineProps({
  foo: String
})

const emit = defineEmits(['change'])
// setup code

function onclick(){
    emit('change',arags)
}
</script>


//父组件
<template>
<div @change='onclick' foo='123'></div>
</template>
<script setup>
function onclick(arags){
}
</script>

6.顶层await和Suspense搭配使用

//子组件   在setup顶层使用await 
<script setup>
  let p = await new Promise((resolve) => {
      setTimeout(() => {
        resolve(123);
      }, 3000);
    });

</script>

<template>
{{p}}

</template>




//父组件

<script setup>
import {defineAsyncComponent} from 'vue' //使用defineAsyncComponent异步引入组件
let Hel =defineAsyncComponent(()=>import('./components/Hello.vue'))


</script>

<template>

<Suspense>
<template v-slot:default>//子组件异步处理完时显示
 <Hel></Hel>

</template>
<template v-slot:fallback> //子组件异步没处理完时显示
 <div>加载中</div>

</template>
</Suspense>
</template>






暂时就这么多,仅记录可能经常用到的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值