VUE3常用的Composition API(组合式API)

官方文档:https://v3.cn.vuejs.org/guide/composition-api-introduction.html

 

1.拉开序幕的setup

 

 

 

 

 

mplate>
  <!-- VUE3组建中的模板结构可以没有跟标签 -->
  <h1>一个人的信息</h1>
  <h2>姓名:{{name}}</h2>
  <h2>年龄:{{age}}</h2>
  <h2>性别:{{sex}}</h2>
  <button @click="sayHello">说话(vue3配置)</button>
  <br />
  <button @click="sayWelcome">欢迎(vue2配置)</button>
  <br />
  <button @click="test1">测试一下在vue2中读取Vue3的数据、方法(可以读取到)</button>
  <br />
  <button @click="test2">测试一下在vue3中读取Vue2的数据、方法(读取不到)</button>
  <br />
</template>

<script>
export default {
  name: 'App',
  //   vue2写法
  data() {
    return {
      sex: '男',
    }
  },
  methods: {
    sayWelcome() {
      alert('欢迎欢迎,热烈欢迎')
    },
    test1() {
      console.log(this.sex)
      console.log(this.name)
      console.log(this.age)
      console.log(this.sayHello)
      this.sayHello()
    },
  },
  //   此处只是测试一下setup,暂时不考虑响应式的问题
  setup() {
    // 数据
    let name = '张三'
    let age = 19

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

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

    // 返回一个对象,常用
    return {
      name: name,
      age: age,
      sayHello,
      test2,
    }

    // 返回渲染函数
    // return () => h('h1', 'h哈哈哈')
  },
}
</script>


2.ref函数

 

 

 

 

 

 

 

 

  

<template>
  <!-- VUE3组建中的模板结构可以没有跟标签 -->
  <h1>一个人的信息</h1>
  <h2>姓名:{{name}}</h2>
  <h2>年龄:{{age}}</h2>
  <h2>工作种类:{{job.type}}</h2>
  <h2>岗位性别:{{job.sex}}</h2>
  <button @click="changeInfo">修改人的信息</button>
  <br />
</template>

<script>
import { ref } from 'vue'
export default {
  name: 'App',
  setup() {
    // 数据
    // refImpl 引用实现对象
    let name = ref('张三')
    let age = ref(19)
    let job = ref({
      type: '前端',
      sex: '女',
    })

    // 方法
    function changeInfo() {
      name.value = '李四'
      age.value = 30
      job.value.type = '程序员'
      job.value.sex = '男'
      console.log(name.value + ', ' + age.value)
    }

    // 返回一个对象,常用
    return {
      name: name,
      age: age,
      job: job,
      changeInfo,
    }

    // 返回渲染函数
    // return () => h('h1', 'h哈哈哈')
  },
}
</script>

 

3.reactive函数(响应式)

 

 

 

 

基本类型用reactive报警告

 

 

 

<template>
  <!-- VUE3组建中的模板结构可以没有跟标签 -->
  <h1>一个人的信息</h1>
  <h2>姓名:{{person.name}}</h2>
  <h2>年龄:{{person.age}}</h2>
  <h2>数字:{{person.number}}</h2>
  <h2>工作种类:{{person.job.type}}</h2>
  <h2>岗位性别:{{person.job.sex}}</h2>
  <h2 v-for="item in person.hobby" :key="item">{{item}}</h2>
  <button @click="changeInfo">修改人的信息</button>
  <br />
</template>

<script>
import { reactive } from 'vue'
export default {
  name: 'App',
  setup() {
    // 数据
    // // refImpl 引用实现对象
    // // 基本类型数据用ref,响应对象的数据用reactive
    // let name = ref('张三')
    // let age = ref(19)
    // // 响应对象的数据用reactive
    // let job = reactive({
    //   type: '前端',
    //   sex: '女',
    // })
    // // 响应对象的数据用reactive
    // let hobby = reactive(['吃饭', '睡觉', '打豆豆'])
    let person = reactive({
      name: '张三',
      age: 19,
      job: {
        type: '前端',
        sex: '女',
      },
      hobby: ['吃饭', '睡觉', '打豆豆'],
    })

    // 方法
    function changeInfo() {
      person.name = '李四'
      person.age = 30
      person.job.type = '程序员'
      person.job.sex = '男'
      person.hobby[0] = '我吃饭'
    }

    // 返回一个对象,常用
    return {
      //   name,
      //   age,
      //   job,
      //   hobby,
      person,
      changeInfo,
    }
  },
}
</script>

 

4.Vue3.0中的响应式原理

 

 

 

 

 

vue2修改属性

 

 

 

 

 

vue3新增修改删除属性

<template>
  <!-- VUE3组建中的模板结构可以没有跟标签 -->
  <h1>一个人的信息</h1>
  <h2>姓名:{{person.name}}</h2>
  <h2 v-show="person.age">年龄:{{person.age}}</h2>
  <h2 v-show="person.sex">性别:{{person.sex}}</h2>
  <h2>工作种类:{{person.job.type}}</h2>
  <h2>岗位性别:{{person.job.sex}}</h2>
  <h2 v-for="item in person.hobby" :key="item">{{item}}</h2>
  <button @click="changeInfo">修改人的信息</button>
  <br />
  <button @click="addSex">添加性别</button>
  <br />
  <button @click="delAge">删除年龄</button>
  <br />
</template>

<script>
import { reactive } from 'vue'
export default {
  name: 'App',
  setup() {
    // 数据
    // // refImpl 引用实现对象
    // // 基本类型数据用ref,响应对象的数据用reactive
    // let name = ref('张三')
    // let age = ref(19)
    // // 响应对象的数据用reactive
    // let job = reactive({
    //   type: '前端',
    //   sex: '女',
    // })
    // // 响应对象的数据用reactive
    // let hobby = reactive(['吃饭', '睡觉', '打豆豆'])
    let person = reactive({
      name: '张三',
      age: 19,
      job: {
        type: '前端',
        sex: '女',
      },
      hobby: ['吃饭', '睡觉', '打豆豆'],
    })

    // 方法
    function changeInfo() {
      person.name = '李四'
      person.age = 30
      person.job.type = '程序员'
      person.job.sex = '男'
      person.hobby[0] = '我吃饭'
    }

    // 添加性别
    function addSex() {
      person.sex = '男'
    }

    // 添加性别
    function delAge() {
      delete person.age
    }

    // 返回一个对象,常用
    return {
      person,
      addSex,
      delAge,
      changeInfo,
    }
  },
}
</script>

 

 

vue3的响应式原理

1)认识window一个属性window.Proxy   (代理

捕获到新增,修改,删除

 

 

 

 

 

 

 

 
1)认识window一个属性window.Reflect 

 

 

 

 

 5.reactive对比ref

 

 

 

6.setup的两个注意点

 7.计算属性与监视

(1)computed函数

(2)watch函数

(3)watchEffect函数

8.vue3的生命周期

 

 

 

 

 

 

 9.自定义hook函数

 

 

 

 

 

 

 

 

 

10.toRef()和toRefs()

 

 

 

 

 

posted @ 2022-07-20 17:17  骑蝴蝶飞  阅读(330)  评论(0编辑  收藏  举报