青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理

news2025/1/15 9:56:36

青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理

  • 一、状态管理
  • 二、Vuex
      • 1. 安装Vuex
      • 2. 创建Vuex Store
      • 3. 在Vue应用中使用Store
      • 4. 在组件中使用状态
      • 5. 模块化Store
  • 三、Vuex应用示例
      • 1. 创建项目
      • 2. 安装Vuex
      • 3. 设置Vuex Store
      • 4. 在主项目中使用Store
      • 5. 创建组件
      • 6. 更新App.vue
      • 7. 运行项目
  • 四、pinia
  • 五、Pinia 与 Vuex 的区别
  • 六、Pinia yiet
      • 步骤 1: 创建项目
      • 步骤 2: 安装依赖
      • 步骤 3: 设置Pinia
      • 步骤 4: 创建组件
      • 步骤 5: 在主应用中使用组件
      • 步骤 6: 运行项目
      • 步骤 7: 构建项目
      • 总结

课题摘要:本文介绍了Vue中的状态管理,重点讲解了Vuex和Pinia两种状态管理库。Vuex是Vue的官方状态管理库,适用于大型应用,它采用集中式存储管理应用状态,并确保状态以可预测的方式变化。文章详细阐述了Vuex的安装、创建Store、在Vue应用中使用Store、以及模块化Store的步骤。Pinia作为Vue 3的新一代状态管理库,以其轻量级、直观的API、TypeScript支持和模块化设计等特点,提供了一种更简洁的状态管理方案。文章还提供了使用Vuex和Pinia的示例代码,展示了如何在Vue项目中实现状态管理和组件间的状态共享。


一、状态管理

状态管理是软件工程中的一个概念,它涉及到在应用程序的不同部分之间跟踪、管理和同步状态(即数据)。在现代的前端开发中,尤其是在单页应用(SPA)中,状态管理尤为重要,因为它们通常需要处理复杂的用户界面和大量的交互。

以下是状态管理的一些关键点:

  1. 状态(State)

    • 状态是应用在任何给定时间点的信息集合,它可以包括用户界面的状态、应用程序的配置、用户数据等。
  2. 状态的不可变性(Immutability)

    • 在状态管理中,状态被视为不可变的,这意味着状态一旦被设置,就不能被直接改变。任何状态的改变都通过产生新的状态来实现。
  3. 状态的集中管理(Centralized State Management)

    • 集中管理状态意味着所有的状态都被存储在一个单一的地方(如Vuex、Redux等状态管理库),这有助于避免状态分散在组件树中,使得状态的跟踪和调试变得更加困难。
  4. 状态的可预测性(Predictability)

    • 状态管理的目标之一是使状态的变化可预测。这意味着状态的变化应该是可追踪和可重现的。
  5. 状态的响应性(Reactivity)

    • 在Vue等框架中,状态管理通常与响应式系统结合使用,这意味着当状态发生变化时,依赖这些状态的UI会自动更新。
  6. 状态管理库

    • 有许多库和框架提供了状态管理的解决方案,如Redux(与React一起使用)、Vuex(与Vue一起使用)、MobX等。
  7. 状态的生命周期(State Lifecycle)

    • 状态管理还涉及到状态的生命周期,包括状态的初始化、更新、删除等。
  8. 副作用(Side Effects)

    • 在状态管理中,副作用指的是那些不直接影响状态,但可能会引起外部变化的操作,如API调用、路由跳转等。这些副作用通常需要被管理,以确保状态的一致性和应用的稳定性。
  9. 模块化(Modularization)

    • 状态管理通常支持模块化,允许开发者将状态分割成更小的部分,每个部分管理自己的状态,这有助于保持代码的可维护性和可扩展性。

状态管理是构建大型、复杂前端应用的关键,它有助于提高应用的可维护性、可测试性和可扩展性。

二、Vuex

在Vue项目中实现状态管理,通常会使用Vuex作为状态管理库,尤其是对于大型应用。Vuex是Vue的官方状态管理库,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。以下是在Vue项目中使用Vuex实现状态管理的基本步骤:

1. 安装Vuex

如果你的项目中还没有安装Vuex,可以通过npm或yarn来安装:

npm install vuex@next --save  # 对于Vue 3项目

2. 创建Vuex Store

在项目的 src 目录下创建一个 store 目录,并在其中创建 index.js 文件:

// src/store/index.js
import { createStore } from 'vuex';

const store = createStore({
  state() {
    return {
      count: 0
    };
  },
  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    increment(context) {
      context.commit('increment');
    }
  }
});

export default store;

3. 在Vue应用中使用Store

src/main.js 中引入并使用store:

// src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';

const app = createApp(App);

app.use(store);

app.mount('#app');

4. 在组件中使用状态

在Vue组件中,你可以通过mapStatemapGettersmapMutationsmapActions辅助函数来使用store中的状态和方法:

<template>
  <div>
    <p>{{ count }}</p>
    <p>{{ doubleCount }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { mapState, mapGetters, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['count']),
    ...mapGetters(['doubleCount'])
  },
  methods: {
    ...mapActions(['increment'])
  }
};
</script>

5. 模块化Store

对于大型应用,你可能需要将store分割成模块。在Vuex中,你可以使用模块来逻辑划分和管理状态:

// src/store/modules/counter.js
export default {
  namespaced: true,
  state() {
    return {
      count: 0
    };
  },
  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    increment(context) {
      context.commit('increment');
    }
  }
};

// src/store/index.js
import { createStore } from 'vuex';
import counter from './modules/counter';

const store = createStore({
  modules: {
    counter
  }
});

export default store;

在组件中使用模块化的状态和方法:

<script>
import { mapState, mapGetters, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState('counter', ['count']),
    ...mapGetters('counter', ['doubleCount'])
  },
  methods: {
    ...mapActions('counter', ['increment'])
  }
};
</script>

通过这些步骤,你可以在Vue项目中实现状态管理,使得状态的维护和更新变得更加集中和有序。

三、Vuex应用示例

以下是一个使用Vue 3和Vite创建的项目的示例,它展示了如何使用Vue的组合式API(Composition API)和Vuex 4来实现状态管理。

1. 创建项目

假设你已经使用Vite创建了一个Vue 3项目:

npm create vite@latest my-vue-app -- --template vue
cd my-vue-app
npm install

2. 安装Vuex

在项目中安装Vuex:

npm install vuex@next

3. 设置Vuex Store

src 目录下创建一个 store 目录,并在其中创建 index.js 文件:

// src/store/index.js
import { createStore } from 'vuex';

export default createStore({
  state() {
    return {
      count: 0,
      todos: [
        { id: 1, text: 'Learn Vue', done: true },
        { id: 2, text: 'Use Vuex', done: false },
      ],
    };
  },
  getters: {
    doneTodos(state) {
      return state.todos.filter(todo => todo.done);
    },
  },
  mutations: {
    increment(state) {
      state.count++;
    },
    addTodo(state, todo) {
      state.todos.push(todo);
    },
    toggleTodo(state, todoId) {
      const todo = state.todos.find(todo => todo.id === todoId);
      if (todo) {
        todo.done = !todo.done;
      }
    },
  },
  actions: {
    increment(context) {
      context.commit('increment');
    },
    addTodo(context, todo) {
      context.commit('addTodo', todo);
    },
    toggleTodo(context, todoId) {
      context.commit('toggleTodo', todoId);
    },
  },
});

4. 在主项目中使用Store

src/main.js 中引入并使用store:

// src/main.js
import { createApp } from 'vue';
import App from './App.vue';
import store from './store';

const app = createApp(App);

app.use(store);

app.mount('#app');

5. 创建组件

src 目录下创建 components 目录,并在其中创建 Counter.vueTodos.vue 组件:

<!-- src/components/Counter.vue -->
<template>
  <div>
    <button @click="decrement">-</button>
    <span>{{ count }}</span>
    <button @click="increment">+</button>
  </div>
</template>

<script>
import { computed } from 'vue';
import { useStore } from 'vuex';

export default {
  setup() {
    const store = useStore();
    const count = computed(() => store.state.count);

    function increment() {
      store.dispatch('increment');
    }

    function decrement() {
      store.commit('increment'); // 注意:这里直接提交mutation,因为不需要进行异步操作
    }

    return {
      count,
      increment,
      decrement,
    };
  },
};
</script>
<!-- src/components/Todos.vue -->
<template>
  <div>
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        <input type="checkbox" v-model="todo.done" @change="toggleTodo(todo.id)" />
        <span>{{ todo.text }}</span>
      </li>
    </ul>
    <button @click="addTodo">Add Todo</button>
    <div>Done Todos: {{ doneTodos.length }}</div>
  </div>
</template>

<script>
import { computed } from 'vue';
import { useStore } from 'vuex';

export default {
  setup() {
    const store = useStore();
    const todos = computed(() => store.state.todos);
    const doneTodos = computed(() => store.getters.doneTodos);

    function addTodo() {
      store.dispatch('addTodo', { id: Date.now(), text: 'New Todo', done: false });
    }

    function toggleTodo(todoId) {
      store.dispatch('toggleTodo', todoId);
    }

    return {
      todos,
      doneTodos,
      addTodo,
      toggleTodo,
    };
  },
};
</script>

6. 更新App.vue

src/App.vue 中使用这些组件:

<template>
  <div id="app">
    <Counter />
    <Todos />
  </div>
</template>

<script>
import Counter from './components/Counter.vue';
import Todos from './components/Todos.vue';

export default {
  name: 'App',
  components: {
    Counter,
    Todos,
  },
};
</script>

7. 运行项目

现在,你可以运行项目来查看状态管理的效果:

npm run dev

访问 http://localhost:3000 来查看应用,你将看到一个计数器和一个待办事项列表,它们的状态都由Vuex管理。

这个示例展示了如何在Vue 3项目中使用Vuex和组合式API来实现状态管理。你可以根据需要添加更多的状态和方法来扩展这个项目。

四、pinia

Pinia 是 Vue.js 的新一代状态管理库,专为 Vue 3 设计,并且也兼容 Vue 2。以下是 Pinia 的一些核心特点和简介:

  1. 轻量级:Pinia 是一个轻量级的状态管理库,体积非常小(大约1kb),几乎不会增加项目体积。

  2. 直观的 API:Pinia 的 API 设计简洁直观,类似于定义组件的方式定义 store,易于上手。

  3. TypeScript 支持:Pinia 提供了完整的 TypeScript 支持,使得在编写状态管理代码时能够获得更好的类型安全性和开发体验。

  4. 去除 Mutations:与 Vuex 不同,Pinia 没有 mutations,只有 state、getters 和 actions,actions 支持同步和异步操作。

  5. Vue Devtools 支持:Pinia 支持 Vue Devtools,提供更好的开发体验,可以在开发工具中查看和调试状态变化。

  6. 模块化设计:Pinia 鼓励将状态分割成多个 store,每个 store 都可以独立管理和维护,支持模块化和命名空间。

  7. 插件系统:Pinia 提供了一个插件系统,可以通过插件扩展功能,例如状态持久化、日志记录等。

  8. 状态持久化:通过 pinia-plugin-persistedstate 插件,可以轻松实现状态的持久化,将状态保存到浏览器的 localStorage 或 sessionStorage 中。

  9. 服务端渲染支持:Pinia 支持服务端渲染,可以在服务端渲染的 Vue 应用中方便地使用状态管理。

  10. 兼容性:虽然专为 Vue 3 设计,但也可以在 Vue 2 项目中使用(通过 pinia-compat)。

Pinia 的设计理念是将状态管理的复杂性降到最低,同时保持灵活性和可扩展性,使其成为 Vue 3 环境下的理想选择。

五、Pinia 与 Vuex 的区别

Pinia 作为 Vue 3 的新一代状态管理库,相较于 Vuex 有以下几个主要优势:

  1. 轻量级:Pinia 的体积非常小,压缩后大约只有 1KB,这使得它在性能上更加高效,尤其是在打包体积上更为精简。

  2. 简化的 API:Pinia 去除了 Vuex 中的 mutations,只保留了 stategettersactions,这简化了状态管理的流程,减少了样板代码。

  3. 组合式 API 风格:Pinia 与 Vue 3 的 Composition API 无缝集成,提供了更灵活的使用方式,使得状态的组织和复用更加简洁明了。

  4. 模块化设计:Pinia 提倡每个 Store 作为独立实体,自然支持模块化,不再需要像 Vuex 中通过 modules 配置来组织不同状态域,这简化了大型应用的状态管理架构。

  5. TypeScript 支持:Pinia 从一开始就对 TypeScript 提供了良好的支持,它的 API 设计考虑了 TypeScript 的使用,使得类型推断更加准确,减少了手动编写类型定义的需求。

  6. 性能优化:得益于其轻量级的设计和对 Vue 3 的深度优化,Pinia 在处理响应式数据时更为高效,特别是在使用 Composition API 时,性能表现得更加优异。

  7. 易用性提升:Pinia 的 API 设计围绕简洁和直观展开,降低了学习曲线,使得状态管理变得更加平易近人,即便是初学者也能快速上手并有效管理应用状态。

  8. 版本适应性:Pinia 专为 Vue 3 量身打造,充分利用 Vue 3 的最新特性和优化,为 Vue 3 应用提供最适配的状态管理方案。

  9. 支持插件功能:Pinia 支持插件来扩展自身功能,如状态持久化、日志记录等。

  10. 服务端渲染支持:Pinia 支持服务端渲染,可以在服务端渲染的 Vue 应用中方便地使用状态管理。

这些优势使得 Pinia 成为现代 Vue 开发的理想状态管理工具,尤其是在 Vue 3 项目中。

六、Pinia yiet

创建一个使用Vite、TypeScript、Vue 3组合式API(Composition API)和Pinia进行状态管理的完整项目示例,可以按照以下步骤进行:

步骤 1: 创建项目

首先,确保你已经安装了Node.js和npm/yarn。然后,使用Vite创建一个新的Vue 3项目,并选择TypeScript模板:

# 使用npm
npm create vite@latest my-vue-app --template vue-ts

# 或者使用yarn
yarn create vite my-vue-app --template vue-ts

进入项目目录:

cd my-vue-app

步骤 2: 安装依赖

安装Pinia:

npm install pinia
# 或者
yarn add pinia

步骤 3: 设置Pinia

src目录下创建一个stores目录,并在其中创建一个Pinia store文件,例如useCounterStore.ts

// src/stores/counter.ts
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++;
    },
    decrement() {
      this.count--;
    },
  },
});

步骤 4: 创建组件

src目录下创建一个新的组件,比如Counter.vue,并使用组合式API和Pinia store:

<template>
  <div>
    <button @click="decrement">-</button>
    <span>{{ count }}</span>
    <button @click="increment">+</button>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import { useCounterStore } from '@/stores/counter';

export default defineComponent({
  name: 'Counter',
  setup() {
    const counterStore = useCounterStore();

    return {
      count: counterStore.count,
      increment: counterStore.increment,
      decrement: counterStore.decrement,
    };
  },
});
</script>

步骤 5: 在主应用中使用组件

编辑src/App.vue文件,引入并使用Counter组件:

<template>
  <div id="app">
    <Counter />
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import Counter from './components/Counter.vue';

export default defineComponent({
  name: 'App',
  components: {
    Counter,
  },
});
</script>

步骤 6: 运行项目

使用以下命令启动开发服务器:

npm run dev
# 或者
yarn dev

现在,你应该能够访问http://localhost:3000看到你的应用。

步骤 7: 构建项目

当你准备好将项目部署到生产环境时,运行以下命令:

npm run build
# 或者
yarn build

这将构建你的应用,并生成可以在生产环境中部署的文件。

总结

这个简单的项目示例展示了如何使用Vite、Vue 3、TypeScript和Pinia来创建一个基本的Web应用。你可以根据需要添加更多的组件、路由、API调用等。Pinia 提供了一种简洁直观的方式来管理应用状态,使得代码更加模块化和可重用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础入门-抓包技术HTTPS协议APP小程序PC应用Web证书信任转发联动

知识点&#xff1a; 1、抓包技术-Web应用-http/s-Burp&Yakit 2、抓包技术-APP应用-http/s-Burp&Yakit 3、抓包技术-PC端应用-http/s-Burp&Yakit 4、抓包技术-WX小程序-http/s-Burp&Yakit 5、抓包技术-软件联动-http/s-Proxifier 6、抓包技术-通用方案-http/s-R…

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09;经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09; 贪心策略&a…

SQL面试题2:留存率问题

引言 场景介绍&#xff1a; 在互联网产品运营中&#xff0c;用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标&#xff0c;直接影响产品的可持续发展和商业价值。通过分析这些数据&#xff0c;企业可以了解用户行为&#xff0c;优化产品策略&#xff0c;提升用户体验…

学会使用开源软件jclasslib 字节码文件的组成 详解

应用场景 1 应用场景 2 学习路线 以正确的姿势打开文件 字节码文件的组成 玩转字节码常用工具 以正确的姿势打开文件 开源软件 jclasslib github 地址 https://github.com/ingokegel/jclasslib 工具使用 字节码文件的组成 基本信息 常量池 字段 方法 属性 详解 魔数 主副版…

primitive 的 Appearance编写着色器材质

import { nextTick, onMounted, ref } from vue import * as Cesium from cesium import gsap from gsaponMounted(() > { ... })// 1、创建矩形几何体&#xff0c;Cesium.RectangleGeometry&#xff1a;几何体&#xff0c;Rectangle&#xff1a;矩形 let rectGeometry new…

详情页 路由传值

路由传值获取参数 渲染数据 主页面 <template><div class"km"><div v-for"item in items" :key"item.id"><div class"title-km" ><img :src"item.imageUrl" alt"Image" class"…

OpenCV基础:矩阵的创建、检索与赋值

本文主要是介绍如何使用numpy进行矩阵的创建&#xff0c;以及从矩阵中读取数据&#xff0c;修改矩阵数据。 创建矩阵 import numpy as npa np.array([1,2,3]) b np.array([[1,2,3],[4,5,6]]) #print(a) #print(b)# 创建全0数组 eros矩阵 c np.zeros((8,8), np.uint8) #prin…

解锁未来情感科技:AI 机器人 Ropet 搭载的前沿智能黑科技

2025年的国际消费电子产品展览会&#xff08;CES&#xff09;上&#xff0c;一只可爱的“毛绒玩具”成了全场焦点。 当然&#xff0c;这并不是一个单纯的玩偶&#xff0c;而是和《超能陆战队》的大白一样温暖的陪伴机器人。 相信有很多人和小编一样&#xff0c;当年看完《超能…

软件测试 —— Selenium常用函数

软件测试 —— Selenium常用函数 操作测试对象点击/提交对象 click()模拟按键输入 send_keys("")清除文本内容 clear() 模拟用户键盘行为 Keys包示例用法 获取文本信息 textget_attribute("属性名称") 获取当前页面标题 title获取当前页面的 url current_u…

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘&#xff08;520字节&#xff09;。21块盘组建了2组RAID6&#xff1a;一组有11块硬盘&#xff0c;一组有10块硬盘。 在存储运行过程中&#xff0c;管理员误操作删除了 2组…

python 轮廓 获取环形区域

目录 效果图&#xff1a; 代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …

算法妙妙屋-------2..回溯的奇妙律动

回溯算法是一种用于系统性地搜索和解决问题的算法&#xff0c;它以深度优先搜索&#xff08;DFS&#xff09;为基础&#xff0c;用来探索所有可能的解决方案。通过递归地尝试候选解并在必要时回退&#xff08;即“回溯”&#xff09;&#xff0c;它能够高效地解决许多涉及组合、…

如何在Jupyter中快速切换Anaconda里不同的虚拟环境

目录 介绍 操作步骤 1. 选择环境&#xff0c;安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题&#xff0c;其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面&#xff0c;如何让jupyter快速切换不同的Pyt…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…

2025/1/12 复习JS

我乞求你别再虚度光阴 ▶ 空心 --------------------------------------------------------------------------------------------------------------------------------- 摘自哔哩哔哩听课笔记。 01 上篇&#xff1a;核心语法 1.基于页面效果的操作 <!DOCTYPE html>…

初学stm32 --- II2C_AT24C02,向EEPROM中读写数据

目录 IIC总线协议介绍 IIC总线结构图 IIC协议时序 1. ACK&#xff08;Acknowledge&#xff09; 2. NACK&#xff08;Not Acknowledge&#xff09; IO口模拟II2C协议 发送起始信号&#xff1a; 发送停止信号&#xff1a; 检测应答信号&#xff1a; 发送应答信号&#x…

Angular-生命周期及钩子函数

什么是生命周期 Angular 创建和渲染组件及其子组件&#xff0c;当它们绑定的属性发生变化时检查它们&#xff0c;并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…

vue(五)基础语法--循环遍历指令

目录 简单数据的处理&#xff08;常用&#xff09; 复杂数据&#xff08;json数据&#xff09; v-for 与对象 通过key管理状态 Key的来源 这一节类同于vue&#xff08;四&#xff09;基础语法--条件渲染-CSDN博客 &#xff0c;本质都是那些基础语句语法的实现。 简单介绍 …