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

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)


http://www.kler.cn/a/548303.html

相关文章:

  • 【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
  • 机器视觉--Halcon If语句
  • SQL-leetcode—1661. 每台机器的进程平均运行时间
  • 使用C#元组实现列表分组汇总拼接字段
  • AWS上基于Llama 3模型检测Amazon Redshift里文本数据的语法和语义错误的设计方案
  • 一、敏捷开发概述:全面理解敏捷开发的核心理念
  • 【动态规划篇】:当回文串遇上动态规划--如何用二维DP“折叠”字符串?
  • PHP 字符串处理操作技巧介绍
  • QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据
  • Android Studio - 解决gradle文件下载失败
  • Django运维系统定时任务方案设计与实现
  • Go语言精进之路读书笔记(第二部分-项目结构、代码风格与标识符命名)
  • Spring Boot自动装配原理深度解析
  • 【Vue3源码解析】响应式原理
  • 训练与优化
  • Python的那些事第二十二篇:基于 Python 的 Django 框架在 Web 开发中的应用研究
  • Java常见排序算法及代码实现
  • Spring Boot全局异常处理终极指南:从青铜到王者的实战演进
  • C语言中的常量与只读变量,#define与const的区别
  • 从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡