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>

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

相关推荐
万少2 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站4 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名7 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫7 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊7 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter7 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折7 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_8 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial8 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu8 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端