美文网首页
VUE3.0 响应式

VUE3.0 响应式

作者: Lisa_Guo | 来源:发表于2021-02-21 18:26 被阅读0次

一、reactive

将一个Object类型的数据转换成响应式数据:Proxy实例

  1. 直接取属性值,属性值不是响应式的
  2. 只能接受Object类型的参数
import { reactive } from 'vue'

// 响应式状态
const state = reactive({
  count: 0
})

// 打印count的值
console.log(state.count)

reactive的响应原理

通过将Object转换成Proxy对其进行拦截

二、ref

ref( target )函数可以在任何地方将变量变成响应式

  1. 将变量变成一个包含value属性的RefImpl对象。
    JS中获取和设置时都要通过变量的value属性,而在html template中则直接使用变量
import { ref } from 'vue'

const counter = ref(0)

console.log(counter) // { value: 0 }
console.log(counter.value) // 0

counter.value++
console.log(counter.value) // 1
  1. 可以接受任何类型的参数。
    如果原始变量target为普通变量,value = target,如果target为对象,value为Proxy(target)
const convert = (val) => isObject(val) ? reactive(val) : val;

ref响应原理

ref实际是通过引用的概念达到响应的目的,无论何处用到变量实际上通过引用的方式指向同一个变量

image

三、toRef

toRef(target, property)将响应式对象的某个属性变为响应式

  1. target为一个响应式对象
  2. 返回一个包含value的ObjectRefImpl对象,value为target[property]的引用
const state = reactive({
  foo: 1,
  bar: 2
})

// state.foo 类型为 number,不具有响应式的功能
// 通过toRef可以将其变为响应式
const fooRef = toRef(state, 'foo')

fooRef.value++
console.log(state.foo) // 2

state.foo++
console.log(fooRef.value) // 3

当您要将 prop 的 ref 传递给复合函数时,toRef 很有用:

export default {
  setup(props) {
    useSomeFeature(toRef(props, 'foo'))
  }
}

四、toRefs

对每个属性调用toRef(),将一个响应式对象的所有属性转换为响应式

当从合成函数返回响应式对象时,toRefs 非常有用,这样消费组件就可以在不丢失响应性的情况下对返回的对象进行分解/扩散:

function useFeatureX() {
  const state = reactive({
    foo: 1,
    bar: 2
  })

  // 逻辑运行状态

  // 返回时转换为ref
  return toRefs(state)
}

export default {
  setup() {
    // 可以在不失去响应性的情况下破坏结构
    const { foo, bar } = useFeatureX()

    return {
      foo,
      bar
    }
  }
}

相关文章

  • Vue响应式原理

    Vue2.x 核心响应式原理 Vue3.0 核心响应式原理 Vue 自定义事件 Vue 发布订阅模式 发布/订阅模...

  • Vue3新特性笔记

    vue3.0的主要变化 响应式基本原理:Object.defineProperty -> Proxy,提高性能 初...

  • 【Vue3.0】- 响应式

    响应式原理 响应式是 Vue.js 组件化更新渲染的一个核心机制 Vue2.x响应式实现 Object.defin...

  • VUE3.0 响应式

    一、reactive 将一个Object类型的数据转换成响应式数据:Proxy实例 直接取属性值,属性值不是响应式...

  • Vue3.0响应式原理

    实现方法: 参考资料: Vue3.0 响应式原理第二节 参考资料: Vue 作者尤雨溪为你分享:Vue 3.0 进...

  • Vue3.0 响应式原理

    Vue3 使用 Proxy 对象重写响应式系统,这个系统主要有以下几个函数来组合完成的: 1、reactive:接...

  • Vue3.0「十七」-- vue3.0升级新特性及Proxy重写

    vue3.0 升级内容 全部用TS重写的(响应式、vdom、模本编译)性能提升,减少代码量会调整部分APIProx...

  • VUE3(九)reactive与toRefs函数

    上一部分中我们说到的ref只是作为单个变量的响应。 Vue3.0中还为我们提供了一个对象式响应的reactive函...

  • vue3.0的改进思路

    vue3.0的改进思路 vue最主要的特点就是响应式机制、模板、以及对象式的组件声明语法,而3.0对这三部分都做了...

  • vue3.0 响应式核心 proxy

    Proxy 是 JavaScript 2015 的一个新特性。Proxy 的代理是针对整个对象的,而不是对象的某个...

网友评论

      本文标题:VUE3.0 响应式

      本文链接:https://www.haomeiwen.com/subject/zprqfltx.html