setup

一.选项式api与组合式api的区别

选项式api

组合式api

像一个函数把某个功能的每一个部分封装在一起

二.setup的概述

1.选项式写法

2.组合式写法

1.setup()函数

对象简写

name确实修改了,但不是响应式的

html 复制代码
<template>
   <div>
      <div class="person">
      <h2>姓名:{{name}}</h2>
      <h2>年龄:{{ age }}</h2>
      <button @click="changeName">修改名字</button>
      <button @click="changeAge">修改年龄</button>
      <button @click="showTel">查看联系方式</button>
      
      </div>
      
   </div>
</template>

<script>
import { shallowReactive } from 'vue';

   // export default {
   //    name:'Person',
   //    data(){
   //       return{
   //          name:'张三',
   //          age:18,
   //          tel:'13888888888888'
   //       }
   //    },
   //    methods:{
   //       showTel(){
   //          alert(this.tel);
   //       }
   //    }
   // }
   export default {
      name:'Person',
      setup(){
         //数据
         let  name='张三' //此时的name并不是响应式
         let age=18  //age也不是响应式
         let tel='123334442' //tel也不是响应式
        
         //方法
         function changeName(){
            name='赖全烙'

         }
         function changeAge(){
            age+=1;
         }
         function showTel(){
            alert(tel);
         }
         return{name,age,tel,changeAge,changeName,showTel}
      
      }
   }
</script>

<style lang="scss" scoped>
            .person {
               background-color: skyblue;
               box-shadow: 0 0 10px;
               border-radius: 10px;
               padding: 20px;
            }
            button {
               margin-right: 10px;
            }
</style>

2. setup的返回值

setup的返回值不一定得是对象,可以是一个渲染函数 函数里直接返回内容

返回的页面

3.setup与选项式api(面试)

setup和选项式api能不能同时存在

答案是 能

data可以读取setup的内容吗

可以,setup的生命周期更早

3.setup的语法糖

这样写的话就能把重点都放在写数据上了

html 复制代码
<template>
   <div>
      <div class="person">
      <h2>姓名:{{name}}</h2>
      <h2>年龄:{{ age }}</h2>
      <button @click="changeName">修改名字</button>
      <button @click="changeAge">修改年龄</button>
      <button @click="showTel">查看联系方式</button>
      
      </div>
      
   </div>
</template>

<script>
import { shallowReactive } from 'vue';
   export default {
      name:'Person',
      // setup(){
      //    //数据
      //    let  name='张三' //此时的name并不是响应式
      //    let age=18  //age也不是响应式
      //    let tel='123334442' //tel也不是响应式
        
      //    //方法
      //    function changeName(){
      //       name='赖全烙'

      //    }
      //    function changeAge(){
      //       age+=1;
      //    }
      //    function showTel(){
      //       alert(tel);
      //    }
      //    return{name,age,tel,changeAge,changeName,showTel}
      
      // }
   }
</script>
<script setup>
   
   //数据
   let name='梁安邦'
   let age=13
   //方法
   function changeName(){
            name='赖全烙'
         }
    function changeAge(){
            age+=1;
         }
   function showTel(){
            alert(tel);
         }
</script>
<style lang="scss" scoped>
            .person {
               background-color: skyblue;
               box-shadow: 0 0 10px;
               border-radius: 10px;
               padding: 20px;
            }
            button {
               margin-right: 10px;
            }
</style>

1.defineOptions()

如何解决需要写两个script的问题,原本一个script来写组件,一个来写选项式api,现在只需要defineOptions
html 复制代码
<template>
   <div>
      <div class="person">
      <h2>姓名:{{name}}</h2>
      <h2>年龄:{{ age }}</h2>
      <button @click="changeName">修改名字</button>
      <button @click="changeAge">修改年龄</button>
      <button @click="showTel">查看联系方式</button>
      
      </div>
      
   </div>
</template>

<script>
import { shallowReactive } from 'vue';
   // export default {
   //    name:'Person',
      // setup(){
      //    //数据
      //    let  name='张三' //此时的name并不是响应式
      //    let age=18  //age也不是响应式
      //    let tel='123334442' //tel也不是响应式
        
      //    //方法
      //    function changeName(){
      //       name='赖全烙'

      //    }
      //    function changeAge(){
      //       age+=1;
      //    }
      //    function showTel(){
      //       alert(tel);
      //    }
      //    return{name,age,tel,changeAge,changeName,showTel}
      
      // }
   // }
</script>
<script setup>
   defineOptions({
  name: 'Person234',      // 组件名
  inheritAttrs: false,    // 其他选项
  // ...
})
   //数据
   let name='梁安邦'
   let age=13
   //方法
   function changeName(){
            name='赖全烙'
         }
    function changeAge(){
            age+=1;
         }
   function showTel(){
            alert(tel);
         }
</script>
<style lang="scss" scoped>
            .person {
               background-color: skyblue;
               box-shadow: 0 0 10px;
               border-radius: 10px;
               padding: 20px;
            }
            button {
               margin-right: 10px;
            }
</style>

注意没有写组件名的时候默认以文件名为组件名

相关推荐
子兮曰1 小时前
Node.js v26.1.0 深度解读:FFI、后量子密码与调试器的进化
前端·后端·node.js
测试员周周2 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
西洼工作室3 小时前
前端直传OSS服务端签名(Policy+Signature)/STS临时凭证
前端·文件上传·oss
你很易烊千玺3 小时前
日常练习-数组 字符串常用的场景
前端·javascript·字符串·数组
weixin199701080164 小时前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
存在的五月雨4 小时前
Vue3项目一些语法
前端·javascript·react.js
nashane5 小时前
HarmonyOS 6学习:Web组件同层渲染事件处理与智能长截图实现
前端·学习·harmonyos·harmonyos 5
大家的林语冰5 小时前
Node 2026 发布,JS 三大新功能上线,最后一个奇偶版本
前端·javascript·node.js
三*一5 小时前
Mapbox GL JS 自研面要素整形工具开发实录
开发语言·javascript·arcgis·ecmascript