setup
setup
setup概述
setup
是Vue3
中一个新的配置项,值是一个函数,它是 Composition API
“表演的舞台”,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup
中。
特点如下:
setup
函数返回的对象中的内容,可直接在模板中使用。setup
中访问this
是undefined
。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
的配置(data
、methos
......)中可以访问到 setup
中的属性、方法
但在setup
中不能访问到Vue2
的配置(data
、methos
......)。
如果与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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步