从“追求尽量不出错”,到正视“出错是必然”的转变,才是微服务架构得以|

如此而已~~~

园龄:3年3个月粉丝:0关注:12

setup

setup

setup概述

setupVue3中一个新的配置项,值是一个函数,它是 Composition API “表演的舞台,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。

特点如下:

  • setup函数返回的对象中的内容,可直接在模板中使用。
  • setup中访问thisundefined
  • setup函数会在beforeCreate之前调用,它是“领先”所有钩子执行的。

参考代码:

<script lang="ts">
//这里以下是vue2的语法
export default {
name: 'Person',
beforeCreate() {
console.log("beforeCreate", "执行");
},
setup() {
console.log("setup", "执行");
// console.log("查看对应setup中的this是: ", this); //可以看到对应的this是unidefined Vue3中已经开始弱化this了
//###### 数据(原本写在data中) ######
let name = '张三'; //注意此时的的name不是响应式的
let age = 18; //注意此时的的age不是响应式的
let tel = '18888888888' //tel 我们的设计只是查看,所以是不是响应式的无所谓
//###### 方法(原本写在methods中) ######
function changeName() {
name = '李四';
console.log(name); //name 改了但是其不是响应式的
}
function changeAge() {
age += 1;
console.log(age); //age 改了但是其不是响应式的
}
function showTel() {
alert(tel);
}
// return {name:name, age:age} //同名可以进行简写
return {name, age, changeName, changeAge, showTel} //最后需要通过这一句话把定义的变量和方法交出去
}
}
</script>

setup返回值

​ 若返回一个对象:则对象中的:属性、方法等,在模板中均可以直接使用(重点关注)。

​ 若返回一个函数:则可以自定义渲染内容,代码如下:

<script lang="ts">
//这里以下是vue2的语法
export default {
name: 'Person',
beforeCreate() {
console.log("beforeCreate", "执行");
},
setup() {
console.log("setup", "执行");
return () => '你好世界' //setup的返回时也可以是一个渲染函数
}
}
</script>

setup与OptionsAPI

​ 首先他们是可以共存的。

Vue2 的配置(datamethos......)中可以访问到 setup中的属性、方法

​ 但在setup不能访问到Vue2的配置(datamethos......)。

​ 如果与Vue2冲突,则setup优先。

<script lang="ts">
//这里以下是vue2的语法
export default {
name: 'Person',
beforeCreate() {
console.log("beforeCreate", "执行");
},
data() {
return {
a: 100,
b: this.name //可以通过this读取到setup中的数据
}
},
methods: {
test() {
alert('测试')
}
},
setup() {
console.log("setup", "执行");
//###### 数据(原本写在data中) ######
let name = '张三';
let age = 18;
let tel = '18888888888'
//###### 方法(原本写在methods中) ######
function changeName() {
name = '李四';
console.log(name);
}
function changeAge() {
age += 1;
console.log(age);
}
function showTel() {
alert(tel);
}
return {name, age, changeName, changeAge, showTel}
}
}
</script>

setup的语法糖

参考语法糖写法

​ 目前我们定义的数据还不是响应式的。

<template>
<div class="person">
<h2>姓名: {{ name }}</h2>
<h2>年龄: {{ age }}</h2>
<button @click="changeName">修改名字</button>
<button @click="changeAge">修改年龄</button>
<button @click="showTel">查看联系方式</button>
</div>
</template>
<script lang="ts">
export default {
name: 'Person' //用于配置组件名,否则组件名就是文件名
}
</script>
<script setup lang="ts">
//###### 数据(原本写在data中) ######
let name = "张三";
let age = 18;
let tel = "18888888888";
//###### 方法(原本写在methods中) ######
function changeName() {
name = "李四";
console.log(name);
}
function changeAge() {
age += 1;
console.log(age);
}
function showTel() {
alert(tel);
}
</script>
<style>
.person {
background-color: skyblue;
box-shadow: 0 0 10px; /* 盒子阴影 */
border-radius: 10px;
padding: 20px;
}
button {
margin: 0 5px;
}
</style>
插件简化组件命名

​ 为了对应组件命名的灵活性,上面我们编写了两个script 一个用于编写组合式写法,一个用于编写组件名,这里我们可以通过插件的方式进行简化操作。

1、插件安装:

npm i vite-plugin-vue-setup-extend -D

2、vite.config.ts中配置

import vueSetupExtend from 'vite-plugin-vue-setup-extend' //导入插件
export default defineConfig({
plugins: [
//...已有的插件
vueSetupExtend() //在已有的基础上添加插件
]
})

3、在代码中使用

<script setup lang="ts" name="Person234"> //就可以只用写一个,加一个name参数即可

4、参考代码:

<template>
<div class="person">
<h2>姓名: {{ name }}</h2>
<h2>年龄: {{ age }}</h2>
<button @click="changeName">修改名字</button>
<button @click="changeAge">修改年龄</button>
<button @click="showTel">查看联系方式</button>
</div>
</template>
<script setup lang="ts" name="Person234">
//###### 数据(原本写在data中) ######
let name = "张三";
let age = 18;
let tel = "18888888888";
//###### 方法(原本写在methods中) ######
function changeName() {
name = "李四";
console.log(name);
}
function changeAge() {
age += 1;
console.log(age);
}
function showTel() {
alert(tel);
}
</script>
<style>
.person {
background-color: skyblue;
box-shadow: 0 0 10px; /* 盒子阴影 */
border-radius: 10px;
padding: 20px;
}
button {
margin: 0 5px;
}
</style>

本文作者:如此而已~~~

本文链接:https://www.cnblogs.com/fragmentary/p/18626624

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   如此而已~~~  阅读(26)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起