• vue3笔记


    vue3笔记

    vue3官网
    尚硅谷视频
    黑马视频


    在这里插入图片描述


    ## vue3的main.js
    1.vue3
    import { createApp } from 'vue' // 引入createApp方法
    import App from './App.vue' // 引入App根组件
    createApp(App).mount('#app')  // 创建一个 Vue 实例,并将其挂载到 id 为 "app" 的 DOM 元素上
    
    2.vue2
    import Vue from 'vue' // 引入vue
    import App from './App.vue' // 引入App根组件
    // 创建一个 Vue 实例,并在创建时指定根组件的渲染函数,然后将该实例挂载到 id 为 "app" 的 DOM 元素上
    new Vue({
      render: h => h(App),
    }).$mount('#app')
    
    3.render函数
    render: function (createElement) {
        return createElement(App);
    }
    ↓ 对象的增强写法
    
    render (createElement) {
        return createElement(App);
    }
    ↓ createElement 简写成 h
    render (h){
        return h(App);
    }
    ↓ 箭头函数
    render: h => h(App);
    
     createElement 函数是 Vue.js 的渲染函数中常用的一个函数,用于创建虚拟 DOM 元素,要有return返回值。
    / createElement 函数的第一个参数:标签名或组件选项,可以是 HTML 标签名字符串,表示创建普通的 HTML 元素,也可以是组件的选项对象,表示创建一个组件实例。/
    
    import App from './App'
    new Vue({
        el: '#app',
        render: h => h(App)
    })
    ↓ 等价与
    import App from './App'
    new Vue({
        el: '#app',
        template: '',
        components: {
     App 
    }
    })
    上面两种的效果是一样的,可以看出 h(App)函数 的作用是:使用App作为这个Vue实例的template,同时一并了注册App组件;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述
    Vue3 模板结构可以不使用根标签

    <template>
      <img alt="Vue logo" src="./assets/logo.png">
      <HelloWorld msg="Welcome to Your Vue.js App"/>
      <div> hello vue3 </div>
    </template>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Vue3 引入组件后,可以再模板中直接使用

    <template>
      <ReactiveDemo />
      <ComputedDemo />
    </template>
    
    <script setup>
    import ReactiveDemo from '@/components/ReactiveDemo.vue'
    import ComputedDemo from '@/components/ComputedDemo.vue'
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Composition API (组合式api)

    选项式API和组合式API的区别:

    1.vue2 选项式API(Options API)
    <script>
    export default {
      // data() 返回的属性将会成为响应式的状态,并且暴露在this上
      data() {
        return {
          count: 0
        }
      },
     
      // methods 是一些用来更改状态与触发更新的函数
    ,它们可以在模板中作为事件监听器绑定
      methods: {
        increment() {
          this.count++
        }
      },
     
      // 生命周期钩子会在组件生命周期的各个不同阶段被调用
    
      mounted() {
        console.log('通常项目中初始化在这里调接口')
      }
    }
    </script>
     
     
    2.vue3 组合式API(Composition API)
    <script>
    import { ref, computed, onMounted } from 'vue'
    export default {
      setup () {
        // 定义变量
        const count = ref(1)
        // 定义计算属性
        const doubleCount = computed(() => {
          return count.value * 2
        })
        // 定义方法
        const changeCount = () => {
          count.value = 100
        }
        // 生命周期函数
        onMounted(() => {
          console.log(count.value, 'onMounted')
        })
        // 统一将变量和方法等暴露出去
        return {
          count, doubleCount, changeCount
        }
      },
    }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 选项式 API可以用包含多个选项的对象来描述组件的逻辑,例如 data、methods 和 mounted。
    • 选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例;
    • 选项式 API 以“组件实例”的概念为中心 (即 this);
    • 组合式 API可以使用导入的 API 函数来描述组件逻辑;