【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了

原因 :vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({``{ goal }} - {``{ index }})复制到第一个dom元素中,input元素仍然是老元素。

html 复制代码
  <body>
    <header>
      <h1>Vue Course Goals</h1>
    </header>
    <section id="user-goals">
      <h2>My course goals</h2>
      <input type="text" v-model="enteredGoalValue" />
      <button @click="addGoal">Add Goal</button>
      <p v-if="goals.length === 0">
        No goals have been added yet - please start adding some!
      </p>
      <ul v-else>
        <li
          v-for="(goal, index) in goals"
          @click="removeGoal(index)"
        >
          {{ goal }} - {{ index }}<input type="text" @click.stop />
        </li>
      </ul>
    </section>
  </body>
</html>
javascript 复制代码
const app = Vue.createApp({
	data() {
		return {
			enteredGoalValue: '',
			goals: [],
		};
	},
	methods: {
		addGoal() {
			this.goals.push(this.enteredGoalValue);
		},
		removeGoal(idx) {
			this.goals.splice(idx, 1);
		},
	},
});

app.mount('#user-goals');

为此引入key属性,可以在所有带有v-for的html标签使用,就像是id,给每个<li>添加不同的key属性,用来告知vue区分不同的<li>,这样做可以保证input中的内容不会丢失。

html 复制代码
<li
          v-for="(goal, index) in goals"
          :key="goal"
          @click="removeGoal(index)"
        >
        ```
相关推荐
油丶酸萝卜别吃6 分钟前
JavaScript 深度合并函数 deepMerge 实现指南(附完整测试用例)
开发语言·javascript·测试用例
kyriewen7 分钟前
Copilot下个月按Token收钱,我算了一笔账:重度用户一年要多花3000块
前端·javascript·openai
java修仙传20 分钟前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
zyl8372123 分钟前
3Dmol.js + Vue3快速上手
vue.js
镜宇秋霖丶36 分钟前
2026.5.18@霖宇博客制作中遇见的问题
vue.js
w_t_y_y38 分钟前
VUE3(二)VUE2和VUE3区别
前端·javascript·vue.js
阿明在折腾1 小时前
在浏览器里实现 PDF 合并与拆分:pdf-lib 实战指南
前端·javascript
不是山谷.:.1 小时前
Axios的【接口防抖 + 请求失败重试 + 弱网提示】三合一高阶版封装
前端·javascript·vue.js·笔记·elementui·typescript
超绝大帅哥1 小时前
babel降级|>, Object.groupBy
前端·javascript
23朵毒蘑菇1 小时前
前端自定义滚动条新星库出现了,看它亮还是不亮
前端·javascript