Vue3 script setup语法糖(1)

文章介绍了Vue3中的setup语法糖如何简化组件的编写,通过对比选项式API和组合式API,展示了在父组件和子组件间的通信如何变得更简洁。例如,使用ref和setup直接处理状态,使用defineProps和defineEmits定义属性和事件,使得代码更加直观易懂。

 最近接触了vue3 setup语法糖,相比较选项式api和组合式api,写法更简化,思路更容易理解,很容易上手,全力支持!

我还是以弹出对话框为例:

父组件:

<template>
<div>
<a-button @click="handleOpen()>弹出对话框</a-button>
<childIndex :export-visible="myVisible" :param-id="myId" @change-show="ChangedShow" />
</div>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
import childIndex from './childIndex.vue';
const myVisible = ref<Boolean>(false);
const myId = ref<String>('');

function handleOpen(){
    myVisible.value = true;
}
function ChangedShow(data){
    if(data=='false'){
        myVisible.value = false;
    }
    else{
        myVisible.value = true;
    }
}
</script>

父组件中,setup语法糖去掉了name属性,直接按组件的名称替代了name.当然,如果想用name,可以沿用原来的方式,在setup语法糖前面加上

<script lang="ts">

  //给name赋值

  export default {

    name: 'ParentIndex',

  };

</script>

子组件:

<template>
<a-modal v-model:visible="modalVisible" width="500px" title="子组件框" footer=null
@ok="handleOK" @cancel="handleClose">
<p>内容………………</p>
</a-modal>
</template>
<script lang="ts" setup>
import {ref,onMounted,watch,reactive} from 'vue';
const props = defineProps({
    exportVisible:{type:Boolean,default:false},
    paramId:{type:String,default:''}
});//defineProps:定义父组件用的属性,无需导入
const emits = defineEmits(['changeShow']);//defineEmits:定义父组件使用的事件,无需导入
const myId = ref<String>('');
const modalVisible = ref<Boolean>(false);
onMounted(()=>{
//定义组件挂载事件
});
watch(()=>props.exportVisible,//直接指定props的属性
(newValue)=>{
    modalVisible.value = newValue;//是否显示该组件框
    if(newValue ===true){
        myId.value = props.paramId;//父组件传入的参数
    }
};
function handleOK(){
    modalVisible.value = false;
    emits('changeShow','false');
}
function handleClose(){
    modalVisible.value = false;
    emits('changeShow','false');
}
</script>

相比之前的api的写法,这种语法糖写法确实简单了呢。

### Vue3 Setup 语法糖详解 #### 一、什么是Setup语法糖Vue3引入了一种新的API风格——组合式API(Composition API),它提供了更好的逻辑复用方式以及更清晰的状态管理机制。为了简化这种新特性的使用,Vue团队进一步推了`<script setup>`标签形式的语法糖[^1]。 #### 二、如何使用Setup语法糖? 当采用此语法编写组件时,默认情况下所有的声明都是公开可见并可以直接用于模板中的;无需再显式导任何东西到`setup()`函数返回对象里去。下面是一个简单的例子展示怎样利用这个特性创建一个计数器应用: ```html <!-- Counter.vue --> <script setup> import { ref } from &#39;vue&#39; const count = ref(0) function increment() { count.value++ } </script> <template> <button @click="increment">{{ count }}</button> </template> ``` 在这个案例中,通过`ref`定义了一个可响应式的变量`count`,并通过方法`increment`实现了点击按钮增加数值的功能。值得注意的是,在这里并没有像传统做法那样调用`defineComponent`或是在选项式API下的`data`, `methods`等属性内做相应配置,而是直接在脚本部分进行了操作。 #### 三、与React Hooks对比 对于拥有React开发背景的人来说,可能会发现组合式函数的概念类似于自定义Hooks。确实两者存在一定的相似之处,尤其是在处理复杂业务场景方面都表现了强大的灵活性。不过需要注意的是,由于Vue具备细粒度级别的反应性追踪机制,因此即使看起来功能相近,但在内部实现原理上还是有着根本区别的[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值