当前位置:首页 > 科技  > 软件

Vuex原理:通过Vuex实现TodoList

来源: 责编: 时间:2024-09-10 09:50:02 215观看
导读什么是Vuex「Vuex」 是一个专为 Vue.js 应用程序开发的状态管理模式。它可以集中管理应用中的组件共享状态,并提供一些工具来保持状态的一致性。Vuex 主要用于解决以下问题:「组件通信」:在大型的 Vue.js 应用中,多个组件

什么是Vuex

「Vuex」 是一个专为 Vue.js 应用程序开发的状态管理模式。它可以集中管理应用中的组件共享状态,并提供一些工具来保持状态的一致性。Vuex 主要用于解决以下问题:NiX28资讯网——每日最新资讯28at.com

  • 「组件通信」:在大型的 Vue.js 应用中,多个组件可能需要共享一些状态(数据)。而通过简单的组件通信方式(props、自定义事件)在复杂的组件关系中可能会变得不够灵活或繁琐。
  • 「状态管理」:Vue.js 的单向数据流通过 props 将数据从父组件传递给子组件,但对于多层嵌套的组件结构,数据流管理可能变得复杂。Vuex 提供了一种集中式管理状态的方式,使得状态的变更变得可预测且易于调试。

以下是 Vuex 的核心概念:NiX28资讯网——每日最新资讯28at.com

1. 「State(状态)」

Vuex 使用一个包含应用层级状态的对象,即 State。这个状态是响应式的,当状态发生变化时,相关组件将自动更新。NiX28资讯网——每日最新资讯28at.com

const store = new Vuex.Store({  state: {    count: 0  }});

2. 「Mutations(变更)」

状态的变更必须通过 Mutations 来进行。Mutations 是同步函数,用于修改状态。通过这种方式,可以追踪状态的变更,并且可以实现一些限制条件,确保状态的可控性。NiX28资讯网——每日最新资讯28at.com

const store = new Vuex.Store({  state: {    count: 0  },  mutations: {    increment(state) {      state.count++;    }  }});

3. 「Actions(动作)」

Actions 是用于提交 Mutations 的函数,可以包含异步操作。通过 Actions,可以更灵活地处理业务逻辑,例如异步请求或条件判断。NiX28资讯网——每日最新资讯28at.com

const store = new Vuex.Store({  state: {    count: 0  },  mutations: {    increment(state) {      state.count++;    }  },  actions: {    incrementAsync({ commit }) {      setTimeout(() => {        commit('increment');      }, 1000);    }  }});

4. 「Getters(获取器)」

Getters 允许组件在访问状态时进行计算,类似于 Vue 组件中的计算属性。Getters 的结果会被缓存,只有依赖的状态发生变化时才会重新计算。NiX28资讯网——每日最新资讯28at.com

const store = new Vuex.Store({  state: {    count: 0  },  getters: {    doubleCount: state => state.count * 2  }});

5. 「Modules(模块)」

Vuex 允许将 Store 分割成模块,每个模块拥有自己的 state、mutations、actions、getters。这样可以更好地组织大型的 Store。NiX28资讯网——每日最新资讯28at.com

const moduleA = {  state: { /* ... */ },  mutations: { /* ... */ },  actions: { /* ... */ },  getters: { /* ... */ }};const store = new Vuex.Store({  modules: {    a: moduleA  }});

6. 单一状态树

Vuex 使用一个单一的状态树来管理应用中的所有状态。这使得整个应用的状态变化可追踪和调试。NiX28资讯网——每日最新资讯28at.com

7. Plugin(插件)

Vuex 允许通过插件扩展其功能。插件是一个函数,可以在每次 mutation 发生时执行一些自定义的逻辑,例如记录日志或持久化存储。NiX28资讯网——每日最新资讯28at.com

// Vuex 插件示例const myPlugin = store => {  // 每次 mutation 时调用  store.subscribe((mutation, state) => {    console.log('mutation type:', mutation.type);  });};

8. 严格模式

Vuex 提供了严格模式,用于检测 State 的变更是否是通过 Mutations 进行的。在开发环境中启用严格模式可以帮助捕获不合规的状态变更。NiX28资讯网——每日最新资讯28at.com

const store = new Vuex.Store({  // ...  strict: process.env.NODE_ENV !== 'production'});

通过这些概念,Vuex 提供了一种集中式状态管理的解决方案,使得状态在应用中的传递和管理更为清晰和可维护。Vuex 不是必需的,尤其对于小型应用可能会显得繁琐,但在大型、复杂的应用中,它提供了一种有组织的方法来管理状态。NiX28资讯网——每日最新资讯28at.com

利用Vuex实现一个tudoList

简单了解一下Vuex之后呢,实现一个小案例。下面是一个使用 Vue 3 和 Vuex 的简单的 Todo List 示例。使用前需要先下载依赖。这个应该都会吧。创建一个 store 文件夹,并在其中创建 index.js 文件来定义 Vuex 的 store:NiX28资讯网——每日最新资讯28at.com

// store/index.jsimport { createStore } from 'vuex';export default createStore({  state: {    todos: []  },  mutations: {    addTodo(state, todo) {      state.todos.push(todo);    },    toggleTodo(state, index) {      state.todos[index].completed = !state.todos[index].completed;    },    removeTodo(state, index) {      state.todos.splice(index, 1);    }  },  actions: {    addTodoAsync({ commit }, todo) {      setTimeout(() => {        commit('addTodo', todo);      }, 1000);    }  },  getters: {    completedTodos: state => state.todos.filter(todo => todo.completed),    remainingTodos: state => state.todos.filter(todo => !todo.completed)  }});

然后在 App.vue 文件中使用这个 store:NiX28资讯网——每日最新资讯28at.com

// App.vue<template>  <div id="app">    <h1>Todo List</h1>    <form @submit.prevent="addTodo">      <input v-model="newTodo" placeholder="Add a new todo" />      <button type="submit">Add</button>    </form>    <div>      <h2>Todo Items</h2>      <ul>        <li v-for="(todo, index) in todos" :key="index">          <input type="checkbox" v-model="todo.completed" />          {{ todo.text }}          <button @click="removeTodo(index)">Remove</button>        </li>      </ul>    </div>    <div>      <h2>Completed Todos</h2>      <ul>        <li v-for="(todo, index) in completedTodos" :key="index">          {{ todo.text }}        </li>      </ul>    </div>    <div>      <h2>Remaining Todos</h2>      <ul>        <li v-for="(todo, index) in remainingTodos" :key="index">          {{ todo.text }}        </li>      </ul>    </div>  </div></template><script>import { computed } from 'vue';import { useStore } from 'vuex';export default {  name: 'App',  data() {    return {      newTodo: ''    };  },  methods: {    addTodo() {      this.$store.commit('addTodo', { text: this.newTodo, completed: false });      this.newTodo = '';    },    removeTodo(index) {      this.$store.commit('removeTodo', index);    }  },  computed: {    todos() {      return this.$store.state.todos;    },    completedTodos: computed(() => useStore().getters.completedTodos),    remainingTodos: computed(() => useStore().getters.remainingTodos)  }};</script><style>#app {  font-family: Avenir, Helvetica, Arial, sans-serif;  text-align: center;  color: #2c3e50;  margin-top: 60px;}form {  margin-bottom: 20px;}ul {  list-style-type: none;  padding: 0;}li {  margin-bottom: 5px;}</style>

这个示例中,我们使用 Vuex 来管理 todo 列表的状态,包括添加新 todo、切换 todo 状态、删除 todo 等功能。在模板中,我们使用了 v-for 指令来渲染 todo 列表,并通过 Vuex 的 getters 计算属性显示已完成和未完成的 todo 列表。NiX28资讯网——每日最新资讯28at.com

小结

使用vuex能够实现组件之间的通信,它是一个状态管理机制,集中管理组件共享状态。NiX28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112757-0.htmlVuex原理:通过Vuex实现TodoList

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Uniapp 开发神器,效率翻倍!

下一篇: 高性能、无侵入的 Java 性能监控神器

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
Top