reactive() 的局限性

reactive() API 有一些局限性:

  1. 有限的值类型 :它只能用于对象类型 (对象、数组和如 MapSet 这样的集合类型)。它不能持有如 stringnumberboolean 这样的原始类型

  2. 不能替换整个对象:由于 Vue 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。这意味着我们不能轻易地"替换"响应式对象,因为这样的话与第一个引用的响应性连接将丢失:

    复制代码
    let state = reactive({ count: 0 })
    
    // 上面的 ({ count: 0 }) 引用将不再被追踪
    // (响应性连接已丢失!)
    state = reactive({ count: 1 })
  3. 对解构操作不友好:当我们将响应式对象的原始类型属性解构为本地变量时,或者将该属性传递给函数时,我们将丢失响应性连接:

    复制代码
    const state = reactive({ count: 0 })
    
    // 当解构时,count 已经与 state.count 断开连接
    let { count } = state
    // 不会影响原始的 state
    count++
    
    // 该函数接收到的是一个普通的数字
    // 并且无法追踪 state.count 的变化
    // 我们必须传入整个对象以保持响应性
    callSomeFunction(state.count)

由于这些限制,我们建议使用 ref() 作为声明响应式状态的主要 API。

相关推荐
小意恩18 小时前
el-table表头做过滤
前端·javascript·vue.js
fury_12318 小时前
vue3:触发自动el-input输入框焦点
javascript·vue.js·elementui
小桥风满袖18 小时前
极简三分钟ES6 - 迭代器Iterator
前端·javascript
小菜全18 小时前
ElementUI 组件概览
前端·vue.js·elementui
lichong95118 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之android 把assert里的dist.zip 包解压到sd卡里
android·vue.js·iphone
JarvanMo18 小时前
提升生产力:每个 iOS 开发者都应该知道的 10 个 Xcode 技巧
前端
玲小珑19 小时前
LangChain.js 完全开发手册(七)RAG(检索增强生成)架构设计与实现
前端·langchain·ai编程
前端小巷子19 小时前
原生 JS 打造三级联动
前端·javascript·面试
江城开朗的豌豆19 小时前
useEffect vs componentDidUpdate:谁才是真正的更新之王?
前端·javascript·react.js
江城开朗的豌豆19 小时前
解密useEffect:让副作用无所遁形!
前端·javascript·react.js