社区脚本中心 → 浏览:帖子主题
分页: 1 2, 共 2 页
* 帖子主题:组合式api(Composition介绍)
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 1 楼 ] 回复
课件代码:vue3-001

1. vue2开发缺点和vue3开发优点
vue2代码冗余,杂乱
vue3则可以把相关的功能代码抽离分割在一起,方便开发者快速阅读

2. setup使用
setup函数是 Composition API(组合API)的入口
setup是启动页面后会自动执行的一个函数
项目中定义的所有变量,方法等都需要在setup中
在setup函数中定义的变量和方法最后都需要 return 出去, 否则无法在视图层中使用

setup(){
  console.log('自动执行')
  const name = '马云'
  const age = 54
  const company = '阿里巴巴'
 
  const btn = ()=>{
      const res = `我叫${name},今年${age}岁了,是${company}创始人`
      console.log(res)
  }

  // 计算属性
  // 侦听器
  return {name,btn}
}

2023-02-03 00:12:11 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 2 楼 ] 回复
课件代码:vue3-002

1. ref介绍
ref 为我们的值创建了一个响应式引用
使用需引用

import {ref} from 'vue'//组合式api
ref('马云')

当ref里的值发生改变时,视图层会自动更新
ref可操作基本数据类型,也可以操作复杂数据类型:对象,数组
建议:ref用来操作基本数据类型:数字,字符串

setup(){
    const name = ref('马云')
    const age = ref(52)
    const company = ref('阿里巴巴')
    //  对象类型
    const obj = ref({
        taobao:'淘宝',
        tamll:'天猫'
    })
    //  数组类型
    const arr = ref([
        {
            xiami:'虾米',
            huabei:'花呗'
        }
    ])
    const btn = ()=>{
        //  响应对象类型
        //  name.value = '马化腾'
        //  obj.value.taobao = '淘宝002'
        //  console.log(obj)
        // 响应数组类型
        arr.value[0].xiami = '虾米002'
        console.log(arr)
    }
    return {name,age,company,btn,obj,arr}
}
2023-02-03 00:15:12 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 3 楼 ] 回复
课件代码:vue3-003

1. reactive介绍
reactive同样为我们的值创建了一个响应式引用
定义基本普通类型数据不能用reactive,用ref
reactive主要定义复杂数据类型,比如数组,对象
reactive可响应深层次的数据,比如多维数组
reactive返回一个响应式的proxy对象
使用需引入

import { reactive } from 'vue'
reactive({name:'马云'})

setup(){
    //  const name = reactive({name:'马云'})
    //  const age = reactive({age:52})
    //  const company = reactive({company:'阿里巴巴'})
    // //  深层次响应式
    //  const pro = reactive({
    //      a:'淘宝',
    //      b:'天猫',
    //      c:{
    //          d:'虾米',
    //          e:'支付宝'
    //      }
    //  })
    const btn = ()=>{
    //    name.name = '马化腾'
    //    age.age = 40
    //    pro.c.d = '虾米003'
          res.name = '马化腾'
    }
    // 共用一个reactive
    const name = '马云'
    const age = 52
    const company = '阿里巴巴'
    const res = reactive({name,age,company})


    return {res,btn}
}
2023-02-03 00:16:12 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 4 楼 ] 回复
课件代码:vue3-004

1. toRef介绍
toRef也可以创建一个响应式数据
ref本质是拷贝粘贴一份数据,脱离了与原数据的交互
ref函数将对象中的属性变成响应式数据,修改响应式数据是不会影响到原数据,但是会更新视图层
toRef的本质是引用,与原始数据有交互,修改响应式数据会影响到原数据,但是不会更新视图层
使用需引入

import {toRef} from 'vue'
//toRef接收两个参数,第一个参数是要操作的对象,第二个参数是对象的某个属性
const obj = {name:'马云'}
toRef(obj,'name')

setup(){
   
    const obj = {name:'马云',age:40}
    //  const res = ref(obj.name)
    const res = toRef(obj,'name')
    const btn = ()=>{
        res.value = '马化腾'
        console.log(res)
        console.log(obj)
    }
    return {res,btn}
}
2023-02-03 00:17:27 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 5 楼 ] 回复
课件代码:vue3-005

1. toRefs介绍
用于批量设置多个数据为响应式数据
toRefs与原始数据有交互,修改响应式数据会影响到原数据,但是不会更新视图层
toRefs还可以与其他响应式函数交互,更加方便处理视图层数据
使用需引入

import {toRefs} from 'vue'
toRefs(obj)

setup(){
    const obj = {name:'马云',age:40}
    const refs = reactive(obj)
    // const res = toRefs(refs)
    const btn = ()=>{
        //  res.name.value = '马化腾'
        //  console.log(res)
        console.log(refs)
        refs.name = '马化腾'
        console.log(refs)
        console.log(obj)
    }
    return {...toRefs(refs),btn}
}
2023-02-03 00:18:18 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 6 楼 ] 回复
课件代码:vue3-006

1. computed介绍
与vue2一致,均是用来监听数据变化
使用需引入

import { computed } from 'vue'

setup() {
      const mayun = ''
      const huateng = ''
      const res = reactive({mayun,huateng})


    // 计算年龄总和
    const sum = computed({
        get(){
            return res.mayun + res.huateng
        },
        set(val){
            console.log(val)
        }
    })
    return {...toRefs(res),sum}
    }
2023-02-03 00:19:03 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 7 楼 ] 回复
课件代码:vue3-007

1. watch侦听器
与vue2一致,均是用来侦听数据变化的
使用需引入

import { watch } from 'vue'

setup() {
        const p1 = ref(0)
        const p2 = ref(1)
        const p3 = reactive({
            name:'马化腾',
            age:50,
            product:{
                wx:14
            }
        })
        // 一:侦听ref的基本数据
        // watch(p1,(newVal,oldVal)=>{
        //    console.log(newVal,oldVal)
        // },{immediate:true})//{immediate:true}立即侦听

        // 二:侦听多个ref响应数据
        // watch([p1,p2],(newVal,oldVal)=>{
        //    console.log(newVal,oldVal)
        // })

        // 三:侦听整个reactive定义的数据:只能监听到最新的结果,之前的结果监听不到
        // watch(p3,(newVal,oldVal)=>{
        //    console.log(newVal,oldVal)
        // })
       
        // 四:侦听reactive定义的数据中的某一个值:可以监听到,无论层级有多深
        watch(()=>p3.product.wx,(newVal,oldVal)=>{
            console.log(newVal,oldVal)
        })
        return {p1,p2,p3}
    },
2023-02-03 00:19:48 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 8 楼 ] 回复
课件代码:vue3-008

1. watchEffect
watchEffect 如果存在的话,在组件初始化的时候就会执行一次用以收集依赖
watch 可以获取到新值与旧值(更新前的值),而 watchEffect 是拿不到的
watchEffect 不需要指定监听的属性,他会自动的收集依赖, 只要我们回调中引用到了 响应式的属性,
那么当这些属性变更的时候,这个回调都会执行,而 watch 只能监听指定的属性而做出变更
使用需引入

import { watchEffect } from 'vue'

setup() {
        const p1 = ref(0)
        const p2 = ref(1)
        const p3 = reactive({
            name:'马化腾',
            age:50,
            product:{
                wx:14
            }
        })
      const S =  watchEffect(()=>{
            const a = p1.value
            const b = p2.value
            console.log('进入页面我就执行')
        })
        S()//停止监听
        return {p1,p2,p3}
    },
2023-02-03 00:20:33 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 9 楼 ] 回复
课件代码:vue3-009

1. shallowRef和shallowReactive
shallowRef只处理基本类型数据
shallowReactive只处理第一层数据
使用需引入

import { shallowReactive,shallowRef } from 'vue'

setup() {
        //shallowReactive:只处理第一层的数据
        const p1 = shallowReactive({
            name:'马云',
            product:{
                taobao:5
            }
        })
        // shallowRef:只处理基本类型数据
        const p2 = shallowRef({
            val:1
        })
        console.log(p2)
        return{...toRefs(p1),p2}
    },
2023-02-03 00:21:07 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 10 楼 ] 回复
课件代码:vue3-010

1. 组件传值

//第一种:进入页面即刻传值(祖孙传值)
const p1 = reactive({name:'马云',age:52})
provide('p',p1)//祖传

const res = inject('p')//孙收

//第二种:点击传值
<Vue ref="val"/>//引入子组件,使用ref调用该子组件
const val = ref()
const p1 = reactive({name:'马云',age:52})
function btn(){
    val.value.receive(p1)
}
2023-02-03 00:21:56 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 11 楼 ] 回复
课件代码:vue3——011

1. vuex
同vue2一致
使用需要安装,引入

//安装
npm install vuex@next --save
//引入
import {useStore} from 'vuex'

2023-02-03 00:22:36 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 12 楼 ] 回复
课件代码:vue3——012


1. 生命周期函数
onBeforeMount —— 在挂载开始之前被调用
onMounted —— 组件挂载时调用
onBeforeUpdate —— 数据更新时调用
onUpdated —— 数据更改导致的虚拟 DOM 重新渲染,在这之后会调用该钩子
onBeforeUnmount —— 在卸载组件实例之前调用
onUnmounted —— 卸载组件实例后调用
onErrorCaptured —— 当捕获一个来自子孙组件的错误时被调用

2. Vue应用程序中有4个主要事件
创建 — 在组件创建时执行
挂载 — DOM 被挂载时执行
更新 — 当响应数据被修改时执行
销毁 — 在元素被销毁之前立即运行

使用需引入
import { onBeforeMount, ....... } from 'vue'
2023-02-03 00:23:38 IP:已设置保密
分页: 1 2, 共 2 页
快速回复主题
账号/密码
用户: 没有注册?密码:
评论内容