当前位置: 首页 > news >正文

vue3 ref/reactive 修改数组的方法

<script setup>
import { ref } from 'vue'

// 给每个 todo 对象一个唯一的 id
let id = 0

const newTodo = ref('')
const todos = ref([
  { id: id++, text: 'Learn HTML' },
  { id: id++, text: 'Learn JavaScript' },
  { id: id++, text: 'Learn Vue' }
])

function addTodo() {
  todos.value.push({ id: id++, text: newTodo.value })
  newTodo.value = ''
}

function removeTodo(todo) {
  todos.value = todos.value.filter((t) => t !== todo)
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo" required placeholder="new todo">
    <button>Add Todo</button>
  </form>
  <ul>
    <li v-for="todo in todos" :key="todo.id">
      {{ todo.text }}
      <button @click="removeTodo(todo)">X</button>
    </li>
  </ul>
</template>

官网给出了这么一段 其中addTodo和removeTodo他们修改数组的方式不同 所以写法也不同,addTodo使用的push直接修改的todos数组,用ref/reactive创建的数据可以监听数组变化自动更新所以不用写todos.value=todos.value.push({ id: id++, text: newTodo.value }),

但是在removeTodo里filter方法是重新生成了一个数组 并没有修改原数组 所以需要写  todos.value = todos.value.filter((t) => t !== todo)

相关文章:

  • 数据结构——红黑树的实现
  • Github Action自动流翻译README文档【CI/CD】
  • npm install 失败
  • 利用盲注技术获取表、列、具体数据
  • 英码科技基于昇腾算力实现DeepSeek离线部署
  • 日本股市概览:主要指数、经济泡沫与现代市场趋势(中英双语)
  • 深入理解C#结构型设计模式:类适配器与对象适配器
  • 公网IP、私网IP、动态IP、静态IP
  • ubuntu 实时系统安装Nvidia驱动
  • 网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
  • 08模拟法 + 技巧 + 数学 + 缓存(D1_模拟法)
  • 信息收集-Web应用JS架构URL提取数据匹配Fuzz接口WebPack分析自动化
  • 基于JavaWeb开发的Java+Spring+vue+element实现旅游信息管理平台系统
  • DeepSeek 可视化部署手册:环境配置与运维指南
  • C++ STL容器之list的使用及复现
  • 一个数组,只考虑速度,怎么获取最大值以及最小值?
  • 图像处理篇---基本Python图像处理
  • 2025年食品安全管理员考试模拟试题及答案
  • 常见的数据仓库有哪些?
  • windows使用cmake编译工程教学:libcurl库源码编译--qt6使用ftp服务--vcpkg下载的包cmake如何使用
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》
  • 端午假期购票日历发布,今日可购买5月29日火车票
  • 观察|“双雄”格局下电池制造商如何生存:加码不同技术、抢滩新赛道
  • 排污染黑海水后用沙土覆盖黑泥?汕尾环保部门:非欲盖弥彰
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研
  • 王毅会见巴西外长维埃拉、总统首席特别顾问阿莫林