笔记

setup 是 组合式 API

组合式 API:
Composition API

想完Vue3,要先搞懂setup。

setup 是 Vu3 新提出来的一个配置项。

141_初试setup - 图1

视频教程

拉开序幕的setup

  1. 理解:Vue3.0中一个新的配置项,值为一个函数。

  2. setup是所有Composition API(组合API)“ 表演的舞台 ”

  3. 组件中所用到的:数据、方法等等,均要配置在setup中。

  4. setup函数的两种返回值:
    4.1 若返回一个对象,则对象中的属性、方法, 在模板中均可以直接使用。(重点关注!)
    4.2 若返回一个渲染函数:则可以自定义渲染内容。(了解)

  5. 注意点:
    5.1 尽量不要与Vue2.x配置混用

  • Vue2.x配置(data、methos、computed…)中可以访问到setup中的属性、方法。
  • 但在setup中不能访问到Vue2.x配置(data、methos、computed…)。
  • 如果有重名, setup优先。

5.2 setup不能是一个async函数,因为返回值不再是return的对象, 而是promise, 模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

源码

App.vue

<template>
  <!-- Vue3 可以没有 div 根标签 
  <h1> I'm App component ^_^ </h1>
  -->

  <h1>一个人的信息</h1>
    <h2>姓名:{{name}}</h2>
    <h2>年龄:{{age}}</h2>
    <h2>性别:{{sex}}</h2>
    <h2>a的值是:{{a}}</h2>
    <button @click="sayHello">说话(Vue3所配置的——sayHello)</button>
    <br>
    <br>
    <button @click="sayWelcome">说话(Vue2所配置的——sayWelcome)</button>
    <br>
    <br>
    <button @click="test1">测试一下在Vue2的配置中去读取Vue3中的数据、方法</button>
    <br>
    <br>
    <button @click="test2">测试一下在Vue3的setup配置中去读取Vue2中的数据、方法</button>

</template>

<script>
  import {h} from 'vue'

  import HelloWorld from './components/HelloWorld.vue'

  export default {
    name: 'App',

    components: {
      HelloWorld
    },

    //Vue3中也可以使用 data
    //∈ Vue2的属性 写法
    data() {
            return {
                sex:'男',
                a:100
            }
        },

    //∈ Vue2的函数 写法
    //  可以正常读取 Vue3的属性和方法。
    methods: {
            sayWelcome(){
                alert('欢迎来到尚硅谷学习')
            },

            test1(){
                console.log(this.sex)
                console.log(this.name)
                console.log(this.age)
                console.log(this.sayHello)
            }

        },


    //此处只是测试一下 setup, 暂时不考虑响应式的问题。
    setup(){
      //数据
      let name = '张三'
      let age = 18

      //方法
      function sayHello(){
        alert(`我叫 ${name}, 我 ${age} 岁了, 你好啊`)
      }

      function test2(){
                console.log(name)
                console.log(age)
                console.log(sayHello)

        //记住: 不要混用。 此处就是测试在 Vue3 中无法访问 Vue2中的属性和方法
        //测试在 Vue3 中读取 Vue2中的属性和方法
                console.log(this.sex) //Vue2 属性
                console.log(this.sayWelcome) //Vue3 方法
            }
      //返回一个对象 常用
      //返回值 如果是对象,那么在模板中可以直接使用。
      return{
        name,
        age,
        sayHello
      }


        //返回一个函数(渲染函数), 直接将 返回值 把 模板中的内容 全部替换掉了。
        //使用 h 之前,上面需要引入一下:
        //return ()=>{return h('h1','尚硅谷')}
        //return () => h('h1','尚硅谷')
    }
  }
</script>