Composition API ref reactive

Composition API

​ composition API也叫组合式API,它是vue3的新特性,当代码量太多的时候,使用vue2的方式编辑不利于维护,所有出现了它

​ setup()函数时vue3中,专门为组件提供的新属性,它为composition API新特性提供了统一的入口

通过setup引入使用组件(直接添加在标签上)

<template>
  <div>
    <img alt="Vue logo" src="./assets/logo.png" />
    <HelloWorld msg="Hello Vue 3.0 + Vite" />
    <Home></Home>
  </div>
</template>

<script setup>//给script标签添加setup,引入的组件可以直接在template中使用
    //组件编译过程中的代码运行是在setup函数中,
	//所有es模块导出都认为暴露给上下文的值,并且包含在setup()返回对象中
  import HelloWorld from "./components/HelloWorld.vue"
  import Home from './components/home.vue'
</script>

setup函数接收的参数

<script>
export default {
    props:{
        msg:Number
    },
    setup(props,context){//它接收两个参数,props接收props属性,context接收上下文对象,包含一些属性attrs、slots、emit,这些属性在vue2中需要通过this才能调用
        //setup函数中的代码会自己运行,setup函数中没this
        console.log(props.msg)
        console.log(context.emit('biu',33))
    }
}
</script>

setup定义方法

<template>
  <div class="" @click="fn">
     主页
  </div>
</template>

<script>
export default {
    setup(props,context){
        const fn = ()=>{
            console.log('调用方法')
        }
        return {fn}//模板中使用变量和方法都需要调用,所以需要return出去,且必须是对象形式
    }
}
</script>

ref创建响应式数据

<template>
  <div>
     主页
     <p @click="add">{{count}}</p><!--模板中使用可以跳过value向下找-->
     <input type="text" v-model="count">
  </div>
</template>

<script>
    import {ref} from 'vue'//使用ref需要引入
    export default {
        setup(props,context){
            const num = 0//直接这样定义,数据不是响应式的
            //ref()会创建一个响应式对象,如果要访问它的值,通过.value
            const count = ref(0)
            const add = ()=>{
                count.value++
            }
            return {
                count,
                add
            }
        }
    }
</script>

reactive创建响应式数据

<template>
  <div>
     <p>姓: <input type="text" v-model="surname"></p>
     <p>名: <input type="text" v-model="firstName"></p>
     <p class="text">全名: <span>{{fullName}}</span></p>
  </div>
</template>

<script>
    import {
        computed, 
        reactive, 
        ref,
        toRefs
    } from 'vue'
    export default {
        setup(props,context){
            const user = reactive({
                surname:"",
                firstName:""
            })
            const fullName = computed(()=>{//定义响应式计算属性,它会根据依赖,自动计算返回响应式数据,这个数据是ref形式的
                return user.surname + user.firstName
            })
            console.log(toRefs(user))//toRefs会将一个响应式数据类型,转换成普通数据类型,并对它进行包装
            return {
                ...toRefs(user),//不能直接解构响应式数据对象,先通过toRefs转换后再解构,解构之后在模板中使用,就可以直接通过写user中的属性名访问,解构之后相当于每个属性都是一个ref
                fullName
            }
        }
    }
</script>

ref跟reactive都是创建响应式数据的

​ ref: 推荐创建基础数据类型使用

​ reactive: 推荐创建复杂数据类型使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值