reactive创建对象类型的响应式数据

reactive创建对象类型的响应式数据

在 Vue 3 的 Composition API 中,reactive() 函数用于创建对象类型**(对象、数组、Map、Set 等)的响应式数据。**

  • 和ref一样,在使用reactive之前,我们需要进行引入
js 复制代码
import { reactive } from 'vue'
  • 之后,也和ref的用法差不多,用reactive创建响应式数据
js 复制代码
  const user = reactive({
        name: '张三',
        age: 25,
        address: {
            city: '北京',
            street: '朝阳区'
        }
    })
js 复制代码
<template>
    <div class="person">
        <h2>{{ user.name }}</h2>
        <p>年龄: {{ user.age }}</p>
        <p>城市: {{ user.address.city }}</p>
    </div>
</template>
  • 让我们添加两个按钮,来修改验证数据是不是响应式的
js 复制代码
<template>
  <div>
    <h2>{{ user.name }}</h2>
    <p>年龄: {{ user.age }}</p>
    <p>城市: {{ user.address.city }}</p>
    
    <button @click="incrementAge">增加年龄</button>
    <button @click="updateCity">更新城市</button>

  </div>
</template>
js 复制代码
<script lang="ts" setup>
    import { reactive } from 'vue'
    const user = reactive({
        name: '张三',
        age: 25,
        address: {
            city: '北京',
            street: '朝阳区'
        }
    })
    const incrementAge = () => {
    user.age++
    }

    const updateCity = () => {
    user.address.city = '上海'}


 </script>
  • 那我们如何读取修改或者添加到reactive中的响应式数据呢?
js 复制代码
  const todos = reactive([
        { id: 1, text: '学习 Vue 3' },
        { id: 2, text: '掌握响应式' }
    ])
js 复制代码
<template>
  <div>
    <h2>{{ user.name }}</h2>
    <p>年龄: {{ user.age }}</p>
    <p>城市: {{ user.address.city }}</p>
    
    <button @click="incrementAge">增加年龄</button>
    <button @click="updateCity">更新城市</button>
    
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        {{ todo.text }}
      </li>
    </ul>
  </div>
</template>
vue 复制代码
<script lang="ts" setup>
    import { reactive } from 'vue'
    const user = reactive({
        name: '张三',
        age: 25,
        address: {
            city: '北京',
            street: '朝阳区'
        }
    })
    const todos = reactive([
        { id: 1, text: '学习 Vue 3' },
        { id: 2, text: '掌握响应式' }
    ])
    const incrementAge = () => {
    user.age++
    }

    const updateCity = () => {
    user.address.city = '上海'}
     // 添加新任务
    todos.push({
        id: todos.length + 1,
        text: `访问${user.address.city}`
    })

</script>

学习过vue2的同学对于v-for肯定不陌生的,它就是一个循环,只是它比JavaScript中的for...of和for...in更加智能,它可以根据类型自动选择最佳的便利策略,其中:key="todo.id用于给每个渲染的元素提供一个唯一的标识符。是v-bind:key的简写

  • 对于多层的嵌套对象也是响应式的;
js 复制代码
<h2>{{ test.x.y.c }}</h2>
<script lang="ts" setup>
    import { reactive } from 'vue'
    const user = reactive({
        name: '张三',
        age: 25,
        address: {
            city: '北京',
            street: '朝阳区'
        }
    })
    const todos = reactive([
        { id: 1, text: '学习 Vue 3' },
        { id: 2, text: '掌握响应式' }
    ])
     const test = reactive({x:{y:{c:666}}})
相关推荐
用户059540174462 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen2 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜2 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉3 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上3 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978333 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒3 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
程序员黑豆4 小时前
鸿蒙应用开发:AttributeModifier 使用教程
前端·harmonyos
codeniu4 小时前
TRAE Work 实战 | 从"有个想法"到线上Demo,我全程只靠对话就完成了
前端·trae
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十):增加管理员角色组管理
前端·后端·ai编程