使用VueCli3+TypeScript+Vuex一步步构建todoList的方法

yizhihongxing

使用VueCli3+TypeScript+Vuex一步步构建todoList

本文将带领大家了解使用VueCli3+TypeScript+Vuex来构建一个简单的todoList。

  1. 初始化项目

首先,在命令行中使用以下命令初始化项目:

vue create todoList

在安装过程中,可以选择Manually select features来手动选择需要安装的特性;也可以在需要的地方添加TypeScript的支持,在后面的过程中,我们将更详细地了解这些细节。

  1. 安装Vuex

安装Vuex的命令如下:

npm install vuex --save
  1. 创建store文件和模块

在src目录下创建一个store文件夹,再创建一个index.ts文件和一个modules文件夹,用于放置各个模块的ts文件。

在index.ts文件中,我们初始化了一个Store,并且引入了modules中的模块。

import Vue from 'vue'
import Vuex, { Store } from 'vuex'
import { state, mutations } from './modules/todo'

Vue.use(Vuex)

const store: Store<any> = new Vuex.Store({
  state,
  mutations
})

export default store

在modules文件夹中,我们创建了一个todo.ts文件,该文件包含了todoList所需要的状态、行为和其它逻辑。以下是示例代码:

import { MutationTree } from 'vuex'
import { TodoState } from '../definitions'

export const state: TodoState = {
  todos: [
    { id: 1, text: 'Learn TypeScript', completed: true },
    { id: 2, text: 'Learn Vue', completed: false }
  ]
}

const mutations: MutationTree<TodoState> = {
  // Add a new todo
  ADD_TODO (state, {text}) {
    state.todos.push({
      id: state.todos.length + 1,
      text,
      completed: false
    })
  },

  // Remove a todo
  REMOVE_TODO (state, {index}) {
    state.todos.splice(index, 1)
  },

  // Toggle todo completed
  TOGGLE_TODO_COMPLETED (state, {index}) {
    state.todos[index].completed = !state.todos[index].completed
  }
}

export default {
  state,
  mutations
}
  1. 创建组件

现在,我们可以开始创建todoList所需要的组件。以下是一个使用Vue单文件组件实现的示例。

<template>
  <div>
    <ul>
      <li v-for="(todo, index) in todos" :key="todo.id">
        <input type="checkbox" v-model="todo.completed" @change="toggleCompleted(todo, index)">
        <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
        <button @click="remove(index)">Remove</button>
      </li>
    </ul>
    <input type="text" v-model="newTodo" @keyup.enter="add">
  </div>
</template>

<script lang="ts">
  import { Component, Vue } from 'vue-property-decorator'
  import { Todo } from '../definitions'

  @Component
  export default class ToDoList extends Vue {
    todos: Todo[] = this.$store.state.todos
    newTodo: string = ''

    add (): void {
      this.$store.commit('ADD_TODO', {text: this.newTodo})
      this.newTodo = ''
    }

    remove (index: number): void {
      this.$store.commit('REMOVE_TODO', {index})
    }

    toggleCompleted (todo: Todo, index: number): void {
      this.$store.commit('TOGGLE_TODO_COMPLETED', {index})
    }
  }
</script>
  1. 集成组件和store

为了正常使用store,我们需要在入口文件main.ts中引入store并挂载到Vue上。代码如下:

import Vue from 'vue'
import store from './store'

import ToDoList from './components/ToDoList.vue'

Vue.config.productionTip = false

new Vue({
  store,
  render: h => h(ToDoList)
}).$mount('#app')
  1. 示例说明

以下是一个关于如何使用VueCli3+TypeScript+Vuex构建与API交互的todoList示例。

首先,我们需要更新项目的dependencies,增加一些API调用所需的库。

npm install axios @types/axios --save

然后,我们需要添加一个新的store模块,用于处理API的调用。以下是示例代码:

import { ActionTree } from 'vuex'
import { Todo, TodoState } from '../definitions'
import axios from 'axios'

const BASE_URL: string = 'http://localhost:3000'

const actions: ActionTree<TodoState, any> = {
  fetchTodos ({ commit }): void {
    axios.get(`${BASE_URL}/api/todos`).then(({ data }) => {
      commit('SET_TODOS', data)
    })
  },

  addTodo ({ commit }, todo: Todo): void {
    axios.post(`${BASE_URL}/api/todos`, todo).then(({ data }) => {
      commit('ADD_TODO', data)
    })
  },

  removeTodo ({ commit }, todo: Todo): void {
    axios.delete(`${BASE_URL}/api/todos/${todo.id}`).then(() => {
      commit('REMOVE_TODO', {id: todo.id})
    })
  },

  toggleCompleted ({ commit }, todo: Todo): void {
    axios.patch(`${BASE_URL}/api/todos/${todo.id}`, todo).then(() => {
      commit('TOGGLE_TODO_COMPLETED', {id: todo.id})
    })
  }
}

export default actions

接着,我们需要更新组件代码以引用API调用。以下是示例代码:

<script lang="ts">
  import { Component, Vue } from 'vue-property-decorator'
  import { Todo } from '../definitions'

  @Component
  export default class ToDoList extends Vue {
    todos: Todo[] = []

    created (): void { this.fetchTodos() }

    async fetchTodos (): Promise<void> {
      await this.$store.dispatch('fetchTodos')
      this.todos = this.$store.state.todos
    }

    add (): void {
      const todo: Todo = { text: this.newTodo, completed: false }
      this.$store.dispatch('addTodo', todo).then(() => {
        this.newTodo = ''
      })
    }

    remove (todo: Todo): void {
      this.$store.dispatch('removeTodo', todo)
    }

    toggleCompleted (todo: Todo): void {
      this.$store.dispatch('toggleCompleted', todo)
    }
  }
</script>

这些代码将使用API实现了get、post、delete和patch方法,从而和后端建立了交互,并使用vuex的action处理异步调用。

  1. 总结

以上就是使用VueCli3+TypeScript+Vuex构建todoList的攻略,通过无缝集成API调用的示例,你应该可以更加深入地了解Vue+TypeScript+Vuex的开发实践。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用VueCli3+TypeScript+Vuex一步步构建todoList的方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • node.js从前端到全栈的必经之路

    Node.js从前端到全栈的必经之路 在现代Web开发中,Node.js技术越来越重要,它作为一个轻量级的解决方案,可以帮助前端开发者从一个只能生产HTML、CSS和JavaScript的Web开发者,逐步变成一个能够为整个Web应用程序提供优质服务的全栈开发者。以下是一个从前端到全栈的Node.js学习路线和攻略: 1. 初步认识Node.js Node.…

    Vue 2023年5月28日
    00
  • Vue中通过Vue.extend动态创建实例的方法

    让我来为您讲解一下在Vue中通过Vue.extend动态创建实例的方法。 Vue.extend方法 Vue.extend方法是Vue的一个全局API,用于创建一个Vue组件构造器,并返回该构造器。通过Vue.extend方法创建的组件构造器可以像普通的Vue组件一样进行注册、传值、生命周期等操作。 创建Vue组件构造器 首先我们需要通过Vue.extend方…

    Vue 2023年5月28日
    00
  • vue-loader和webpack项目配置及npm错误问题的解决

    下面就来详细讲解”vue-loader和webpack项目配置及npm错误问题的解决”的完整攻略。 一、vue-loader和webpack项目配置 1. 安装相关依赖 在一个vue项目中使用vue-loader和webpack,首先需要安装相关的依赖。输入以下命令进行安装: npm install vue vue-loader vue-template-c…

    Vue 2023年5月28日
    00
  • VUE DEMO之模拟登录个人中心页面之间数据传值实例

    我们来详细讲解一下“VUE DEMO之模拟登录个人中心页面之间数据传值实例”。 简介 在Vue框架中,不同页面之间的数据传值是常见的操作。本文就介绍一种实现模拟登录个人中心页面之间数据传值的方法。通过这种方法,可以更好地理解在Vue中如何实现不同页面之间的数据传值。 实现过程 准备工作 首先,需要准备好Vue.js和Vue-Router两个库。可以使用npm…

    Vue 2023年5月27日
    00
  • vue使用Google Recaptcha验证的实现示例

    下面是详细的讲解“vue使用Google Recaptcha验证的实现示例”的完整攻略,包括步骤和示例说明。 一、前置步骤 注册Google Recaptcha账号并获取Site key和Secret Key。 在项目中引入Recaptcha的JavaScript库,可以在页面中引入,也可以在vue中通过NPM安装vue-recaptcha组件来引用。 二、…

    Vue 2023年5月27日
    00
  • vue使用ajax获取后台数据进行显示的示例

    使用 Vue.js 进行前端开发时,常常需要从后端获取数据,并将其显示在页面上。其中一个常用的方式是通过 Ajax 技术向后端服务器发送 HTTP 请求,在得到响应后在前端页面上进行展示。下面是使用 Vue.js 实现向后端服务器发送 Ajax 请求并将其返回结果显示在页面上的示例攻略。 1. 在 Vue.js 中使用 Ajax Vue.js 提供了内置的 …

    Vue 2023年5月28日
    00
  • 使用vscode 开发uniapp的方法

    使用 VS Code 开发 uni-app 的步骤如下: 第一步:创建 uni-app 项目 使用命令行工具或者 HBuilderX 创建一个 uni-app 项目,如果你还没有创建过 uni-app 项目,可以参考 uni-app 官方文档 第二步:安装必要的插件 在 VS Code 中安装以下插件: Vue Vue 3 Snippets Vetur un…

    Vue 2023年5月27日
    00
  • Vue3 JSX解释器的实现

    下面是“Vue3 JSX解释器的实现”的完整攻略。 1. 了解JSX JSX是一种JavaScript的语法扩展,它可以在JavaScript代码中直接嵌入XML标签和属性,并使用类似HTML的语法格式。Vue3支持使用JSX语法来定义组件模板,其主要实现方式是通过JSX转换器将JSX语法转换为普通的JavaScript语法。在实现Vue3 JSX解释器之前…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部