• (三)vue3新特性 ref reactive


    @


    有个这个连接得看下 就是讲的新特性的区分https://www.jianshu.com/p/9c3e7cd3dff3

    使用setup函数改写

    使用ref响应式对象

    这里举例说明ref的使用,注意没有使用vue2中的data,methods啥的,使用的是setup,她执行在所有生命周期以及data之前。

    <template>
      <div id="app">
        <img alt="Vue logo" src="./assets/logo.png">
        <h1>{{count}}</h1>
        <h1>{{double}}</h1> 展示暴露出来的属性就可实现触发
            <button @click="increase">+1</button><br/>
      </div>
    </template>
    <script lang="ts">
    import { ref, computed } from 'vue'
    export default defineComponent({
      name: 'App',
      setup(){
      	const count = ref(0);
      	计算属性double的实现 首先引入computed
      	const double = computed(()=>{
    		return count.value * 2
    	})
      	const increase = () =>{
      	 	这里需要用 .value 才能获取到值
    		count.value ++;
    	}
    	return{
    		count,    暴露相应数据
    		increase, 暴露可执行的方法
    		double,
    	}
      }
    });
    </script>
    

    更进一步使用reactive 响应式对象

    区别就在于 上述的在于都是单独暴露使用,没有像之前的整合到一起使用的

      setup(){
    	const data = reactive({
    		count: 0,
    		increase: ()=> {
    			data.count ++ ;   注意不需使用data.count.value
    		},
    		double:computed(()=>{
    			return data.count  * 2
    		})
    	})
     }
     return {
     	data
     }
    注意顶部的位置需要修改 就是data的值
    {{data.count}}
    {{data.double}}
    

    出现了个问题 就是这个data会声明成 any 类型 ,原因就是在double的里面是用的computed计算属性,他内部一个返回的不对,可以声明一个interface的声明去声明一下

    interface DataProps {
    	count:number,
    	increase:number;
    	double: () => void
    }
    
    const data:DataProps 给data声明上就行了
    

    torefs转化响应式对象

    注意到在最后暴露出来的时候写的是 data 在使用的时候就是data.......什么的。所以按道理是可以直接使用 ...data 展开对象直接暴露出来的,就可以直接使用 count 啥的了。但是不可以因为出来的都不是响应式的对象值了,只是单纯的相关类型的值了。这里就要用到torefs了
    注意:要引入roRefs

    const refData = torefs(data)
    return{
    	...refData 
    }
    这里的... 就是在对象里面直接展开对象 相当于就是单个把data对象里面的给暴露出来 toRefs生成了响应式对象
    

    响应式对象

    vue2是使用的object上的一个拦截方法,数组更新可以 但是对象更新就不行了
    在这里插入图片描述

    Proxy 的更新使用

      Proxy对象用于定义基本的操作自定义行为(如属性查找、赋值、枚举、函数调用等)
      在这里插入图片描述

    总结

    总之这两个都是可以进行相应的做法,
    refs算是单独的 就像是你声明了一个变量是你使用的时候就可以直接使用
    reactive 是一个整合,就像是你声明的那个对象,里面存着你写的一个个的值,你使用的时候可以单个取出来,但是会丧失他的响应性,所以要进行toRefs
    不管是什么基本上都是进行 变量 方法的 声明和使用
    方法 计算属性啥的

  • 相关阅读:
    javascript预编译练习(变态篇)
    javascript预编译
    原码、反码、补码 详解
    Ubuntu 16.04安装anaconda3
    html+css实现奥运五环(环环相扣)
    jquery实现分页效果
    Centos6.5修改mysql登陆用户密码
    2020/5/29 JS中的循环和函数
    2020/5/27 JS 循环语句
    2020/5/26 JS
  • 原文地址:https://www.cnblogs.com/tcz1018/p/16306597.html
Copyright © 2020-2023  润新知