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)

相关推荐
UXbot2 分钟前
帮助企业低门槛开展AI应用开发的平台推荐
前端·低代码·ui·交互·产品经理·原型模式·web app
英勇无比的消炎药28 分钟前
样式随心定制:TinyRobot 样式覆写与 CSS 变量实战解析
vue.js
橘子星28 分钟前
基于 Vite 的多模态生图前端工程实践
前端·javascript·人工智能
想要成为糕糕手29 分钟前
从零到一:CSS 3D 旋转立方体完全指南
前端·css·canvas
疯狂的魔鬼30 分钟前
多角色督办任务详情页:从权限矩阵到组件拆分的完整实现
前端·vue.js·架构
英勇无比的消炎药30 分钟前
拆解内核:深入分析 TinyRobot 输入区组件设计与实现原理
vue.js
恋猫de小郭31 分钟前
Android 17 正式版发布,全新 AI 和各种破坏性更新
android·前端·flutter
英勇无比的消炎药32 分钟前
组件联动进阶:玩转 TinyRobot 组合开发提升项目灵活性
vue.js
半个落月35 分钟前
从零搭建 AI 生图前端|Vite 工程化 + 通义千问 API 实战,附 API Key 安全方案
前端·人工智能
用户8524950718436 分钟前
Canvas 和 ECharts:一个蓝色方块引发的血案
javascript·人工智能