前言
随着现代 Web 应用的迅速发展,越来越多的前端框架和技术出现在我们的视野中。Vue.js 作为目前最受欢迎的前端框架之一,提供了一种更加简单、灵活的方式来构建复杂的交互式应用程序。而 Vuex 是一个 Vue.js 应用程序的状态管理模式。在本文中,我们将探讨如何使用 Vue.js 和 Vuex 来构建一个 Todo List 应用程序。
基本概念
Vue.js
Vue.js 是一个轻量级的 JavaScript 框架,用于构建交互式的 Web 用户界面。它采用了 MVVM(Model-View-ViewModel)模式,将视图层和数据层分离开来,使得它们可以独立地开发、测试和维护。Vue.js 的核心是它的渐进式框架,允许你在现有的 Web 应用程序中引入它的部分功能,也可以作为一个完整的框架来使用。
Vuex
Vuex 是一个 Vue.js 应用程序的状态管理模式。它允许您将整个应用程序的状态集中到一个单独的地方,这使得它更容易维护和测试。Vuex 采用了 Flux 架构,它包含了一个 Store、Getter、Mutation、Action 和 Module 等概念。
Todo List 应用程序
Todo List 应用程序是一个简单的 Web 应用程序,用于记录用户的待办事项。用户可以添加、删除、编辑、完成、取消完成待办事项。对于一个初学者来说,Todo List 应用程序是一个非常好的练手项目。
实现
安装依赖
在开始开发之前,我们需要先安装 Vue.js 和 Vuex 及其依赖:
npm install vue vuex --save
创建 Store
Vuex 应用程序的状态被存储在一个单一的 Store 对象中。在我们的 Todo List 应用程序中,我们需要创建一个 Store 对象并定义它的状态、Getter、Mutation 和 Action。
首先,在 src 目录下创建一个 store.js 文件,并添加以下代码:
-- -------------------- ---- ------- ------ --- ---- ----- ------ ---- ---- ------ ------------- ----- ----- - - ------ - - --- -- ------ ------ -------- ---------- ----- -- - --- -- ------ ------ - ---- ---- ----- ---------- ----- - - - ----- ------- - - --------- ----- -- ------------ --------------- ----- -- - ------ ----------------------- -- ---------------- -- --------------- ----- -- - ------ ----------------------- -- --------------- - - ----- --------- - - --------- ------- ----- -- - ---------------------- -- ---------- ------- ----- -- - ----- ----- - -------------------------- -- ------- --- -------- -- ------ --- --- - ------------------------- -- ----- - -- ------------ ------- --- -- - ----- ----- - -------------------------- -- ------- --- --- -- ------ --- --- - ------------------------- -- - -- ------------------- ------- ----- -- - ----- ----- - -------------------------- -- ------- --- -------- -- ------ --- --- - ------------------------- -- ----- - - - ----- ------- - - -------- -- ------ -- ----- -- - ------------------ ----- -- --------- -- ------ -- ----- -- - ------------------- ----- -- ----------- -- ------ -- --- -- - --------------------- --- -- ----------------- -- ------ -- ----- -- - ---------------------------- ----- - - ------ ------- --- ------------ ------ -------- ---------- ------- --展开代码
在这个 store.js 文件中,我们首先创建了一个 Vue.js 的实例,并使用 Vuex 插件来安装 Vuex。然后,我们定义了一个包含所有待办事项的状态对象 state,在状态对象中,我们预先添加了两个待办事项。接下来,我们定义了 Getter,Getter 可以让我们在 Store 中对 State 进行一些计算,返回一个新值,而不是直接修改 State。在本例中,我们定义了 allTodos、remainingTodos、completedTodos 三个 Getter。然后,我们定义了四个 Mutation,Mutation 用于修改 State,每个 Mutation 接收一个 State 对象和一个 Payload(载荷)。最后,我们定义了四个 Action,Action 是异步的,它可以执行异步操作,并调用 Mutation 来修改状态。
创建组件
接下来,我们将创建 TodoList 组件。
-- -------------------- ---- ------- ---------- ----- -------- --------- --------- -- ---- ----------- -- --------- --------------- --------- ------------ -- ------ ------ ----------- -------- ------ -------- ---- ---------------- ------ -------- ---- ---------------- ------ - ---------- - ---- ------ ------ ------- - ----------- - --------- -------- -- --------- - --------------- ---------- -- - - --------- ------ ------- -- - ------ -------- ---------- ----- ----------- ------- - --- - -------- ----- --------------- ------- ------------ ------- ----------- ----- ---------- ----- - --------展开代码
在 TodoList 组件中,我们首先引入所需的依赖和组件,并使用 mapGetters 辅助函数从 Vuex Store 中获取我们的 Getter。然后,我们在模板中使用 Vue.js 的 v-for 指令来遍历所有待办事项,并使用 v-bind 指令将每个待办事项的数据传递给 TodoItem 组件。最后,我们还添加了一个 TodoForm 组件,用于添加新的待办事项。
接下来,我们将创建 TodoItem 组件,它将用于展示单个待办事项。
-- -------------------- ---- ------- ---------- ---- --------- ------------ -------------- --- ------ --------------- ------------------------- ------------------------- -- ------ --------------- --------------------- -------------------------- ------------------------------ ---------------------- -- ------- ----------------------------------- ------ ----------- -------- ------ ------- - ------ - ----- - ----- ------- --------- ---- - -- ------ - ------ - ------ ---------------- ----------- ----- - -- --------- - ------------ - ------ ---------------- - -- -------- - ------------------ - ---------------------------------------- - ------------- ---------- -------------------- -- -- ----------- - --------------- - ---- -- ----------- - -- ------------------ --- --- - ---------- - --------------- --------------- - ----- - ---- - -------------------------------- - ------------- ------ ----------------- -- --------------- - ----- - -- ----------------- - ---------- - --------------- --------------- - ----- -- ------------ - ---------------------------------- ------------- - - - --------- ------ ------- ---------- - ---------------- ------------- - --- - -------- ----- ------------ ------- ----------- ----- ---------- ----- - ---------------------- - ------------- ----- - ------------------ - ------- ----- ----------------- ------------ ---------- ----- -------- ----- ----------- ------- - --------------------------- - ------ ----- ------------------------ ----- - ------ - ------------ ----- ----------------- ------------ ------- --- ----- ----- ------ ----- -------- --- ----- -------------- ---- ------- -------- - --------展开代码
在 TodoItem 组件中,我们首先声明了一个 Props 对象,并将 todo 对象作为传入的 Props。然后,我们使用 v-bind 指令将所有需要从 Store 中获取的数据绑定到对应的初始值上。接下来,我们添加了一个点击事件,用于切换待办事项完成的状态,并将操作映射到 Vuex Store 中的 updateTodoStatus Action 上。然后,我们为每个待办事项添加了一个双击事件,用于将待办事项的标题切换到编辑模式,并在按下“Enter”键保存修改,按下“Esc”键取消编辑。最后,我们还添加了一个点击事件,用于从 Vuex Store 中删除指定的待办事项。
接下来,我们将创建 TodoForm 组件,它将用于添加新的待办事项。
-- -------------------- ---- ------- ---------- ----- ------- - --- --------- ----- -------------------------- ------ ----------- --------------- ---------------- - --- ----- -- ------- ---------------------- --- ---------------- ------- ------ ----------- -------- ------ ------- - ------ - ------ - ------ -- - -- -------- - --------- - ------------------------------- - --- ----------- ------ ----------- ---------- ----- -- ---------- - -- - - - --------- ------ ------- -- - ---------- ----- -------------- ----- - --- - -------- ----- --------------- ------- ------------ ------- ----------- ----- ---------- ----- - ---- - -------- ----- ------------ ------- - ------------------ - ------- ----- ----------------- -------- ---------- ----- -------- --- ----- -------------- ---- ------------- ----- - ------ - ----------------- -------- ------- ----- ------ ----- -------- --- ----- -------------- ---- ------- -------- - ---------------- - -------- ---- ------- ------------ - --------展开代码
在 TodoForm 组件中,我们创建了一个包含一个输入框和一个添加按钮的表单。在用户输入一个新的待办事项时,我们将它存储到 Vuex Store 中,并清空输入框中的文本。
路由配置
最后,我们需要将 TodoList 组件挂载到路由上,以便我们可以查看它。
首先,安装 vue-router:
npm install vue-router --save
然后,在 main.js 文件中添加以下代码:
-- -------------------- ---- ------- ------ --- ---- ----- ------ --- ---- ----------- ------ ------ ---- ---------- ------ ----- ---- --------- ------------------------ - ----- --- ----- ------- ------ ------- - -- ------- -----------------展开代码
在 router.js 文件中,我们将配置 TodoList 组件的路由:
-- -------------------- ---- ------- ------ --- ---- ----- ------ ------ ---- ------------ ------ -------- ---- --------------------------- --------------- ------ ------- --- -------- ----- ---------- ------- - - ----- ---- ----- ----------- ---------- -------- - - --展开代码
在这段代码中,我们创建了一个 Router 对象,并配置了 TodoList 组件的路由。
最后,在 App.vue 文件中添加以下代码:
-- -------------------- ---- ------- ---------- ---- --------- -------------- ------ ----------- -------- ------ ------- - ----- ----- - --------- ------- ---- - ------------ --------- ---------- ------ ----------- ----------------------- ------------ ------------------------ ---------- ----------- ------- ------ -------- ----------- ----- - --------展开代码
在 App.vue 组件中,我们只需要使用 router-view 组件,它将自动渲染当前路由匹配的组件。
结语
在本文中,我们探讨了如何使用 Vue.js 和 Vuex 来构建一个 Todo List 应用程序。通过实现这个简单的项目,我们不仅学习了 Vue.js 和 Vuex 的基本概念和用法,还对于前端应用程序开发有了更深入的了解。希望这篇文章能够帮助你更好地掌握 Vue.js 和 Vuex。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bc24f4a231b2b7edd8fc4a