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>

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

相关推荐
Highcharts.js1 小时前
Highcharts 云端渲染的真相:交互式图表与服务器端生成的边界
前端·信息可视化·服务器渲染·highcharts·图表渲染
zhuyan1082 小时前
Linux 系统磁盘爆满导致无法启动修复指南
前端·chrome
编程牛马姐2 小时前
独立站SEO流量增长:提高Google排名的优化方法
前端·javascript·网络
NotFound4863 小时前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
Dontla3 小时前
高基数(High Cardinality)问题介绍(Prometheus、高基数字段、低基数字段)
前端·数据库·prometheus
whuhewei5 小时前
为什么客户端不存在跨域问题
前端·安全
妮妮喔妮5 小时前
supabase的webhook报错
开发语言·前端·javascript
qq_12084093716 小时前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机
yivifu6 小时前
手搓HTML双行夹批效果
前端·html·html双行夹注
奔跑的卡卡7 小时前
Web开发与AI融合-第一篇:Web开发与AI融合的时代序幕
前端·人工智能