美文网首页
vue3.0-响应性基础API

vue3.0-响应性基础API

作者: 清风昙 | 来源:发表于2022-03-13 21:05 被阅读0次
  • reactive
    返回对象的响应式副本
const obj = reactive({ count: 0 })

响应式转换是“深层”的——它影响所有嵌套 property。在基于 ES2015 Proxy (opens new window)的实现中,返回的 proxy 是等于原始对象的。建议只使用响应式 proxy,避免依赖原始对象。

  • readonly
    获取一个对象 (响应式或纯对象) 或 ref 并返回原始 proxy 的只读 proxy。只读 proxy 是深层的:访问的任何嵌套 property 也是只读的。
const original = reactive({ count: 0 })
const copy = readonly(original)
watchEffect(() => {
  // 适用于响应性追踪
  console.log(copy.count)
})
// 变更original 会触发侦听器依赖副本
original.count++
// 变更副本将失败并导致警告
copy.count++ // 警告!
  • isReactive
    检查对象是否是 reactive创建的响应式 proxy。
import { reactive, isReactive } from 'vue'
export default {
  setup() {
    const state = reactive({
      name: 'John'
    })
    console.log(isReactive(state)) // -> true
  }
}

如果 proxy 是 readonly 创建的,但还包装了由 reactive 创建的另一个 proxy,它也会返回 true

import { reactive, isReactive, readonly } from 'vue'
export default {
  setup() {
    const state = reactive({
      name: 'John'
    })
    // 从普通对象创建的只读 proxy
    const plain = readonly({
      name: 'Mary'
    })
    console.log(isReactive(plain)) // -> false
    // 从响应式 proxy 创建的只读 proxy
    const stateCopy = readonly(state)
    console.log(isReactive(stateCopy)) // -> true
  }
}
  • isReadonly
    检查对象是否是由readonly创建的只读 proxy。

  • roRaw
    返回 reactive 或 readonly proxy 的原始对象。这是一个转义口,可用于临时读取而不会引起 proxy 访问/跟踪开销,也可用于写入而不会触发更改。不建议保留对原始对象的持久引用。请谨慎使用。

const foo = {}
const reactiveFoo = reactive(foo)
console.log(toRaw(reactiveFoo) === foo) // true
  • markRaw
    标记一个对象,使其永远不会转换为 proxy。返回对象本身。
const foo = markRaw({})
console.log(isReactive(reactive(foo))) // false
// 嵌套在其他响应式对象中时也可以使用
const bar = reactive({ foo })
console.log(isReactive(bar.foo)) // false
  • shallowReactive
    创建一个响应式 proxy,跟踪其自身 property 的响应性,但不执行嵌套对象的深度响应式转换 (暴露原始值)。
const state = shallowReactive({
  foo: 1,
  nested: {
    bar: 2
  }
})
// 改变状态本身的性质是响应式的
state.foo++
// ...但是不转换嵌套对象
isReactive(state.nested) // false
state.nested.bar++ // 非响应式
  • shallowReadonly
    创建一个 proxy,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换 (暴露原始值)。
const state = shallowReadonly({
  foo: 1,
  nested: {
    bar: 2
  }
})
// 改变状态本身的property将失败
state.foo++
// ...但适用于嵌套对象
isReadonly(state.nested) // false
state.nested.bar++ // 适用

相关文章

  • vue3.0-响应性基础API

    reactive返回对象的响应式副本 响应式转换是“深层”的——它影响所有嵌套 property。在基于 ES20...

  • Composition API 使用

    响应性基础 API[https://v3.cn.vuejs.org/api/basic-reactivity.ht...

  • vue3—reactive如何更改属性

    vue3新增了响应性API,其中数据有两种,ref和reactive。reactive支持非原始对象,基础类型不能...

  • vue3视频观看笔记-2

    vu3官方文档[https://v3.vuejs.org/api/] vue3.0-递归监听-理解 p15视频 v...

  • vue3

    ~ vue3 的基础 api 有那些 const { createApp, reactive,// 创建响应式数据...

  • Vue3 源码解析(六):响应式原理与 reactive

    今天这篇文章是笔者会带着大家一起深入剖析 Vue3 的响应式原理实现,以及在响应式基础 API 中的 reacti...

  • vue2中computed原理

    要理解这个,首先要理解vue2的数据响应式原理,因为computed这个API的实现是建立在数据响应式的基础之上的...

  • thinkphp5.0 学习目录结构

    基础 请求 和 响应 URL请求 和 路由 模型 和 关联 数据库 查询语言 视图和模板 调试和日志 api 接...

  • Spring Cloud Gateway 优雅修改请求与响应报文

    修改请求报文、响应报文是API网关框架的基础功能,然而在Spring Cloud Gateway中修改报文体似乎并...

  • vue3.0小入门

    整体上来说如果有很强的2.0基础,那相对来说会很快入手。重点全部在组合式API和响应式API,其他的实际上跟2.0...

网友评论

      本文标题:vue3.0-响应性基础API

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