vue中的那些事(刷新+key+v-if,v-for)

文章目录

    • vue中添加属性,页面不刷新解决方法
      • 解决思路:
      • 解决方法:
      • 注意事项:
    • vue3中解决方案
      • 解决思路:
      • 解决方法:
      • 注意事项:
    • vue 中key
      • 一、基本概念
      • 二、`key` 的作用
      • 三、`key` 的原理
      • 四、`key` 的使用注意事项
      • 五、总结
      • 六、性能优化方面
      • 七、对 Vue 生命周期的影响
    • Vue 3 中 `key`
      • 一、基本概念
      • 二、`key` 的作用
      • 三、`key` 的原理
      • 四、`key` 的使用注意事项
      • 五、性能优化
      • 六、对组件生命周期的影响
      • 七、总结
      • 八、与 Vue 2 的差异
    • v-if 与v-for 为啥不建议一起用
      • 一、性能问题
      • 二、逻辑混淆
      • 三、优先级问题
      • 四、替代方案
      • 五、总结
      • 六、特殊情况

vue中添加属性,页面不刷新解决方法

以下是解决 Vue 中给对象添加新属性但界面不刷新的问题的方法:

解决思路:

  1. Vue 无法检测对象属性的添加或删除,因为 Vue 会在实例创建时将对象的属性转换为 getter/setter 以实现响应式,而后续添加的属性不会自动转换。
  2. 可以使用 Vue.set()this.$set() 方法添加属性,这会确保新添加的属性是响应式的。
  3. 也可以使用 Object.assign() 方法创建一个新的对象,将原对象和新属性合并,这样 Vue 会重新渲染。

解决方法:

  • 使用 Vue.set() 或 this.$set() 方法
<template><div><p>{{ myObject.name }}</p><button @click="addNewProperty">添加新属性</button></div>
</template><script>
export default {data() {return {myObject: {name: '张三'}};},methods: {addNewProperty() {// 使用 Vue.set 或 this.$set 方法添加新属性this.$set(this.myObject, 'age', 25);}}
};
</script>

代码解释

  • data 中定义了一个对象 myObject ,初始只有 name 属性。

  • methods 中的 addNewProperty 方法里,使用 this.$set(this.myObject, 'age', 25); 来添加新属性 age 并赋值为 25。Vue.set()this.$set() 方法接收三个参数:要修改的对象、新属性的名称、新属性的值。这会确保 Vue 对新添加的属性是可响应的,添加属性后界面会刷新显示新的属性。

  • 使用 Object.assign() 方法

<template><div><p>{{ myObject.name }}</p><p>{{ myObject.age }}</p><button @click="addNewProperty">添加新属性</button></div>
</template><script>
export default {data() {return {myObject: {name: '张三'}};},methods: {addNewProperty() {// 使用 Object.assign 方法添加新属性this.myObject = Object.assign({}, this.myObject, { age: 25 });}}
};
</script>

代码解释

  • 同样在 data 中定义 myObject
  • addNewProperty 方法中,使用 Object.assign({}, this.myObject, { age: 25 }); 来创建一个新对象。Object.assign() 第一个参数是目标对象,这里是空对象,第二个参数是原对象,第三个参数是包含新属性的对象。将结果赋值给 this.myObject ,这样 Vue 会重新渲染界面,显示新添加的属性。

注意事项:

  • Vue.set()this.$set() 方法适用于向已有对象添加一个新属性。
  • Object.assign() 方法会生成一个新的对象,需要将新对象重新赋值给原对象,原对象的引用会发生改变。
  • 不建议直接使用 this.myObject.age = 25; 这样的方式添加新属性,因为 Vue 无法检测到这种方式添加的属性,不会触发界面更新。

vue3中解决方案

以下是在 Vue 3 中给对象添加新属性并使界面刷新的方法:

解决思路:

  1. Vue 3 使用 reactiveref 来创建响应式对象。对于 reactive 对象,直接添加新属性不会触发响应式更新,因为 Vue 3 的响应式系统是基于 Proxy 的,需要使用 ref 或特定的 API 来解决。
  2. 对于 reactive 对象,可以使用 toRefsObject.assign 来添加新属性,同时保持响应式。
  3. 对于 ref 对象,可以直接修改 value 并添加新属性,因为 ref 的值是通过 .value 来访问和修改的,它会自动触发响应式更新。

解决方法:

  • 使用 reactive 对象添加新属性
<template><div><p>{{ myObject.name }}</p><p>{{ myObject.age }}</p><button @click="addNewProperty">添加新属性</button></div>
</template><script>
import { reactive, toRefs } from 'vue';export default {setup() {const myObject = reactive({name: '张三'});const addNewProperty = () => {// 使用 toRefs 和 Object.assign 来添加新属性myObject.age = 25;Object.assign(toRefs(myObject), { age: myObject.age });};return {...toRefs(myObject),addNewProperty};}
};
</script>

代码解释

  • 首先从 vue 中导入 reactivetoRefs

  • setup 函数中,使用 reactive 创建一个响应式对象 myObject ,初始只有 name 属性。

  • addNewProperty 方法中,先直接添加 age 属性到 myObject 上(此时还不会触发响应式更新)。

  • 然后使用 Object.assign(toRefs(myObject), { age: myObject.age }); ,将 age 属性转换为 ref ,从而触发响应式更新。

  • 通过 return {...toRefs(myObject), addNewProperty }; 暴露响应式对象和方法。

  • 使用 ref 对象添加新属性

<template><div><p>{{ myObject.value.name }}</p><p>{{ myObject.value.age }}</p><button @click="addNewProperty">添加新属性</button></div>
</template><script>
import { ref } from 'vue';export default {setup() {const myObject = ref({name: '张三'});const addNewProperty = () => {// 直接修改 ref 的 value 来添加新属性myObject.value.age = 25;};return {myObject,addNewProperty};}
};
</script>

代码解释

  • vue 中导入 ref
  • setup 函数中,使用 ref 创建一个响应式对象 myObject
  • addNewProperty 方法中,直接修改 myObject.value.age = 25; ,因为 ref 对象的 value 是响应式的,修改其 value 会触发界面更新。
  • 通过 return { myObject, addNewProperty }; 暴露响应式对象和方法。

注意事项:

  • 在 Vue 3 中,推荐使用 setup 函数进行组件逻辑的编写。
  • reactive 对象适合复杂对象的响应式处理,但添加新属性时要注意触发响应式的方法。
  • ref 对象更适合处理基本数据类型的响应式,也可以用于对象,但需要通过 .value 来访问和修改。
  • 使用 toRefs 可以将 reactive 对象的属性转换为 ref ,方便在模板中使用和保持响应式。

vue 中key

一、基本概念

在 Vue 的 v-for 指令中,我们通常会使用 key 属性来为列表中的每个元素提供一个唯一的标识符。例如:

<template><ul><li v-for="item in itemList" :key="item.id">{{ item.name }}</li></ul>
</template><script>
export default {data() {return {itemList: [{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }]};}
};
</script>

二、key 的作用

  • 优化性能
    • Vue 在更新使用 v-for 渲染的列表时,需要高效地更新 DOM 元素。key 帮助 Vue 精确地确定哪些元素已经改变、添加或删除,避免不必要的 DOM 操作。
    • 当列表数据发生变化时,Vue 会根据 key 的值来比较新旧节点,只更新真正需要更新的元素,而不是重新渲染整个列表。

三、key 的原理

  • 节点比较机制
    • Vue 会使用虚拟 DOM(Virtual DOM)来更新页面。在更新时,它会对比新旧虚拟 DOM 树。
    • 对于 v-for 渲染的列表元素,没有 key 时,Vue 会使用一种“就地复用”策略,即尝试尽可能复用已有元素,通过移动元素位置和更新元素内容来完成更新。但这种方式可能导致错误,尤其是当列表项顺序发生变化或元素有状态时。
    • key 时,Vue 会根据 key 精确匹配新旧节点,对元素的比较更精确。如果 key 不同,Vue 会认为它们是不同的元素,会创建或销毁相应的元素,而不是复用。
    • 例如,在列表中添加、删除或重新排序元素时:
      • key:Vue 可能会错误地复用元素,导致元素的状态和内容不匹配,比如一个输入框的内容可能会显示在错误的位置。
      • key:Vue 会根据 key 准确找到对应的元素进行更新,保持元素的状态和内容一致性。

四、key 的使用注意事项

  • 唯一性
    • key 的值必须是唯一的,通常使用数据项的唯一标识符,如 id 。使用 index 作为 key 通常不是一个好的选择,因为当列表元素的顺序发生变化时,index 也会改变,可能导致 Vue 错误地复用元素。
    • 以下是使用 index 作为 key 的情况(不推荐):
<template><ul><li v-for="(item, index) in itemList" :key="index">{{ item.name }}</li></ul>
</template>
  • 类型稳定性
    • key 的类型应该保持稳定,避免使用随机数或会改变的属性作为 key ,否则会导致 Vue 频繁创建和销毁元素,影响性能。

五、总结

  • key 在 Vue 的列表渲染中起着至关重要的作用,它通过为列表元素提供唯一标识符,帮助 Vue 精确更新 DOM ,提高性能和避免错误更新。
  • 合理使用 key 可以避免列表更新时出现元素复用错误和性能问题,确保元素状态和内容的准确更新。

六、性能优化方面

  • 当使用 key 时,Vue 可以更快地找到需要更新、添加或删除的元素,避免不必要的 DOM 操作,特别是对于大型列表的更新,性能提升明显。
  • 它使得 Vue 的虚拟 DOM 算法可以更准确地比较新旧节点,减少了比较和更新的复杂度,从而提高了页面更新的效率。

七、对 Vue 生命周期的影响

  • 正确使用 key 可以避免一些组件生命周期钩子的意外触发。例如,在列表元素更新时,如果 key 错误使用,可能会导致组件的 mountedupdated 钩子在不应该触发的时候触发,而正确使用 key 可以确保这些钩子只在必要时被调用。

总之,在 Vue 中使用 key 是一个简单但非常重要的优化手段,能够显著提升 Vue 应用在处理列表更新时的性能和正确性。

Vue 3 中 key

一、基本概念

在 Vue 3 的 v-for 指令中,key 属性依然被广泛使用,用于为列表中的每个元素提供一个唯一标识符。例如:

<template><ul><li v-for="item in itemList" :key="item.id">{{ item.name }}</li></ul>
</template><script>
import { ref } from 'vue';export default {setup() {const itemList = ref([{ id: 1, name: '苹果' },{ id: 2, name: '香蕉' },{ id: 3, name: '橙子' }]);return { itemList };}
};
</script>

二、key 的作用

  • 优化性能
    • Vue 3 的渲染引擎使用虚拟 DOM 来更新页面。当列表数据发生变化时,key 可以帮助 Vue 3 精确地识别出哪些元素发生了变化,从而只对变化的元素进行 DOM 操作,避免对整个列表进行重新渲染。
    • 有助于 Vue 3 在更新列表时进行更高效的差异比较和更新,提升性能。

三、key 的原理

  • 基于虚拟 DOM 的比较
    • Vue 3 会根据 key 对虚拟 DOM 节点进行精确匹配和对比。
    • 在更新列表时,Vue 3 会遍历新旧虚拟 DOM 树,对于 v-for 渲染的元素:
      • key 存在时,Vue 3 会优先根据 key 来判断新旧节点是否为同一个节点。如果 key 相同,Vue 3 会尝试更新该节点的内容;如果 key 不同,会认为是不同节点,可能会添加新节点或删除旧节点。
      • 没有 key 时,Vue 3 会使用一种“就地复用”策略,尝试复用已有元素,通过调整元素位置和更新元素内容来完成更新,但这种方式可能导致状态不一致或元素错误复用的问题,尤其在列表元素顺序改变或元素包含内部状态(如输入框的输入值)时。

四、key 的使用注意事项

  • 唯一性
    • key 的值应该是唯一的,最好使用数据项的唯一标识符,如对象的 id 。避免使用 index 作为 key ,因为当列表元素顺序发生变化时,使用 index 作为 key 会导致元素错误复用,可能引起数据显示错误或状态丢失。以下是一个使用 index 作为 key 的不推荐示例:
<template><ul><li v-for="(item, index) in itemList" :key="index">{{ item.name }}</li></ul>
</template>
  • 稳定性
    • key 的类型和值应该保持稳定,不要使用会频繁变化的值作为 key ,否则会导致 Vue 3 频繁创建和销毁元素,影响性能。例如,使用随机数作为 key 会导致性能问题。

五、性能优化

  • 减少 DOM 操作
    • 通过使用 key ,Vue 3 可以更精确地定位到需要更新、添加或删除的元素,减少不必要的 DOM 操作,提高更新效率,尤其对于包含大量元素的列表更新效果显著。
    • 避免了对未变化元素的重新渲染,节省了渲染资源和时间。

六、对组件生命周期的影响

  • 避免不必要的组件更新
    • 正确使用 key 可以确保组件的生命周期钩子被正确调用。当 key 发生变化时,会触发组件的销毁和重新创建,相应的 onBeforeUnmountonMounted 等生命周期钩子会被调用;如果 key 未变化,只会触发 onUpdated 等更新相关的生命周期钩子。

七、总结

  • Vue 3 中的 key 是一个重要的优化工具,基于虚拟 DOM 比较机制,它为列表元素提供唯一标识,使 Vue 3 能够精确更新元素。
  • 合理使用 key 可以避免列表更新中的元素错误复用和性能问题,保证列表更新的准确性和高效性。

八、与 Vue 2 的差异

  • Vue 3 的虚拟 DOM 算法在性能和实现细节上可能有所改进,但 key 的基本原理和作用与 Vue 2 类似。
  • Vue 3 更加强调使用 refreactive 来管理数据,在使用 key 时,通常会配合这些响应式数据进行操作,但 key 的核心作用和使用原则保持一致,都是为了精确更新元素和优化性能。

通过合理使用 key ,可以让 Vue 3 应用在处理列表更新时更加高效和稳定,避免出现意外的渲染错误和性能瓶颈。

v-if 与v-for 为啥不建议一起用

以下是关于 Vue 中不建议将 v-ifv-for 一起使用的详细解释:

一、性能问题

  • 重复计算
    • v-ifv-for 一起使用时,v-for 会为列表中的每个元素创建一个 v-if 的判断条件,这可能导致性能问题。
    • 对于 v-for 循环的每一项,都需要先执行 v-if 的条件判断,在列表元素较多的情况下,会产生大量的条件判断操作,增加了计算开销。

二、逻辑混淆

  • 代码可读性
    • 混合使用 v-ifv-for 会使代码的逻辑变得复杂,难以理解和维护。
    • 开发者可能难以清晰地判断 v-if 的条件是针对整个列表还是列表中的单个元素,容易造成混淆。例如:
<template><ul><li v-for="item in itemList" v-if="shouldShow" :key="item.id">{{ item.name }}</li></ul>
</template>
  • 在上述代码中,不清楚 shouldShow 是用于过滤整个列表还是仅针对某个元素。

三、优先级问题

  • Vue 中的优先级
    • 在 Vue 的模板编译过程中,v-for 的优先级比 v-if 更高。
    • 这意味着 v-if 会在 v-for 的每一次迭代中都进行判断,而不是先根据 v-if 的条件筛选元素,再进行 v-for 迭代。例如:
<template><ul><li v-for="item in itemList" v-if="item.isVisible" :key="item.id">{{ item.name }}</li></ul>
</template>
  • 这里会先遍历 itemList 中的每一项,再对每一项进行 item.isVisible 的判断,而不是先过滤出 isVisible 的项再进行遍历,可能导致不必要的计算。

四、替代方案

  • 计算属性
    • 对于需要根据条件过滤列表元素的情况,最好使用计算属性。例如:
<template><ul><li v-for="item in visibleItemList" :key="item.id">{{ item.name }}</li></ul>
</template><script>
import { ref } from 'vue';export default {setup() {const itemList = ref([{ id: 1, name: '苹果', isVisible: true },{ id: 2, name: '香蕉', isVisible: false },{ id: 3, name: '橙子', isVisible: true }]);const visibleItemList = computed(() => {return itemList.value.filter(item => item.isVisible);});return { visibleItemList };}
};
</script>
- 这里使用 `computed` 计算属性 `visibleItemList` 来过滤出满足条件的元素,再通过 `v-for` 进行渲染,代码更清晰,性能也更好。

五、总结

  • 不建议将 v-ifv-for 一起使用,因为会带来性能问题、逻辑混淆和优先级导致的意外行为。
  • 优先考虑使用计算属性来实现根据条件筛选列表元素的功能,这样可以提高代码的可读性和性能,避免 v-ifv-for 一起使用时产生的各种问题。

六、特殊情况

  • 在某些情况下,如果 v-if 的条件不依赖于 v-for 的元素,并且对性能影响不大时,可以一起使用,但这是少数情况。一般来说,尽量将它们分开使用,以保证代码的清晰性和性能。

通过避免 v-ifv-for 的混合使用,并使用计算属性等替代方案,可以让 Vue 应用的代码更易于维护和性能优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之进程

Linux之进程 一.进程进程之形ps命令进程状态特殊进程孤儿进程守护进程 进程创建之创建子进程进程特性优先级进程切换&#xff08;分时操作系统&#xff09; 二.环境变量三.进程地址空间四.进程终止&进程等待五.进程替换六.自定义shell 本篇博客希望简略的介绍进程&#xff…

漫话架构师|什么是系统架构设计师(开篇)

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 关注犬余&#xff0c;共同进步 技术从此不孤单

在AI智能中有几种重要的神经网络类型?6种重要的神经网络类型分享!

神经网络今天已经变得非常流行&#xff0c;但仍然缺乏对它们的了解。一方面&#xff0c;我们已经看到很多人无法识别各种类型的神经网络及其解决的问题&#xff0c;更不用说区分它们中的每一个了。其次&#xff0c;在某种程度上更糟糕的是&#xff0c;当人们在谈论任何神经网络…

业务幂等性技术架构体系之消息幂等深入剖析

在系统中当使用消息队列时&#xff0c;无论做哪种技术选型&#xff0c;有很多问题是无论如何也不能忽视的&#xff0c;如&#xff1a;消息必达、消息幂等等。本文以典型的RabbitMQ为例&#xff0c;讲解如何保证消息幂等的可实施解决方案&#xff0c;其他MQ选型均可参考。 一、…

【C语言】线程----同步、互斥、条件变量

目录 3. 同步 3.1 概念 3.2 同步机制 3.3 函数接口 1. 同步 1.1 概念 同步(synchronization)指的是多个任务(线程)按照约定的顺序相互配合完成一件事情 1.2 同步机制 通过信号量实现线程间的同步 信号量&#xff1a;通过信号量实现同步操作&#xff1b;由信号量来决定…

Linux内核的启动

一、需求 Linux系统中内核处于硬件和应用层之间。整个系统启动和初始化的过程&#xff0c;Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同&#xff0c;这就要求内核能支持各种处理器的初始化操作。Liux内核各个模块&#xff0c;大部分设计时做到了体系…

[手机Linux] ubuntu 错误解决

Ubuntu: 1,ttyname failed: Inappropriate ioctl for device 将 /root/.profile 文件中的 mesg n || true 改为如下内容。 vim /root/.profile tty -s && mesg n || true 2,Errors were encountered while processing: XXX XXXX sudo apt-get --purge remove xxx…

Docker的入门

一、安装Docker 本教程参考官网文档&#xff0c;链接如下: CentOS | Docker Docs 这个教程是基于你的虚拟机已经弄好了&#xff08;虚拟机用的CentOS&#xff09;&#xff0c;并且有SecureCRT或者MobaXterm等等任意一个工具 1.1 卸载旧版 如果系统中存在旧版本的Docker&a…

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂&#xff0c;你在本地删除文件&#xff0c;并没有同步到云端&#xff0c;但是本地却显示同步成功。 比如删掉了一个目录&#xff0c;在本地看已经删掉&#xff0c;onedrive显示已同步&#xff0c;但是别的电脑并不会同步到这个删除操作&#xff0c;在网页版…

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化&#xff08;Lasso&#xff09;2.2 L2正则化&#xff08;Ridge&#xff09;2.3 弹性网络正则化&#xff08;Elas…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行&#xff0c;执行 WSL --install -d ubuntu若报错&#xff0c;则先执行 WSL --update2. 重启电脑 因安装了子系统&#xff0c;需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示&#xff0c;输入账号&#xff0c;密…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)

在开发跨进程应用程序时&#xff0c;进程间通信&#xff08;IPC&#xff09;是一个关键问题。Qt 框架提供了多种 IPC 技术&#xff0c;其中 QSharedMemory 是一种高效的共享内存方式&#xff0c;可以实现多个进程之间快速交换数据。本文将详细讲解 QSharedMemory 的概念、用法及…

[UE4图文系列] 5.字符串转中文乱码问题说明

原文连接&#xff1a;[UE4图文系列] 5.字符串转中文乱码问题说明 - 哔哩哔哩 本例以原生C和UE4 C字符串传输中出现的中文乱码问题进行说明 一.乱码示例: 1.直接用中文字符串初始化FString,在蓝图中进行打印 FString GetStrWithChinese() {FString fstr"这是一句中文"…

人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用。近日&#xff0c;演员王星因接到一份看似来自知名公司的拍戏邀约&#xff0c;被骗至泰国并最终被带到缅甸。这一事件迅速引发了社会的广泛关注。该…

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例&#xff08;快入入门java-grpc框架&#xff09; 参考官方入门案例教程&#xff1a;里面我看proto编译&#xff0c;其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式&#xff0c;每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响&#xff0c;可以选择合适的备份策略。主要备份方式有三大类&#xff1a;逻辑备份&#xff08;mysqldump&#xff09;&#xff0c;物理备份和二进制文件备…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而&#xff0c;“ Android上未安装应用程序”是一种常见的智能手机错误消息&#xff0c;由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机&#xff0c;这当然会非常令人沮丧&#xff0c;但幸运的是&…

干净卸载Windows的Node.js环境的方法

本文介绍在Windows电脑中&#xff0c;彻底删除Node.js环境的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/144810076&#xff09;中&#xff0c;我们介绍过在Windows电脑中&#xff0…