使用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日

相关文章

  • Vue3+Vite项目按需自动导入配置以及一些常见问题修复

    下面是针对“Vue3+Vite项目按需自动导入配置以及一些常见问题修复”的完整攻略: 一、Vite中的自动导入配置 1. 在项目中安装vite-plugin-components 在Vite中实现按需自动导入需要用到一个插件——vite-plugin-components。使用npm在项目中安装这个插件: npm i vite-plugin-componen…

    Vue 2023年5月28日
    00
  • vue动态绑定多个class以及带上三元运算或其他条件

    当我们需要在Vue组件中绑定多个class时,可以使用v-bind:class指令,它可以动态地绑定一个或多个class到元素上。除此之外,还可以结合三元表达式或其他条件来动态地控制class的绑定。 基本语法 <template> <div v-bind:class="{ class1: expression1, class2:…

    Vue 2023年5月27日
    00
  • vue项目查看vue版本及cli版本的实现方式

    要查看Vue版本以及CLI版本,需要在控制台中使用命令来完成。下面是具体的步骤和示例: 步骤1:查看Vue版本 在控制台中运行以下命令: vue –version 在命令行中,你应该看到Vue的版本号。例如: Vue CLI 4.2.3 这意味着你正在使用Vue CLI4的最新版本。 步骤2:查看CLI版本 在控制台中运行以下命令: vue info 这将…

    Vue 2023年5月28日
    00
  • 关于Vue的 Vuex的4个辅助函数

    下面是对于“关于Vue的 Vuex的4个辅助函数”的详细攻略: 什么是 Vuex 辅助函数? 在进行 Vuex 的开发过程中,我们需要在组件中访问 Vuex 的 state,mutations 和 actions 等内容,常规的做法是在组件中使用 this.$store.state.myState 这种方式来访问。但是这样的方式不仅冗长而且繁琐,我们需要频繁…

    Vue 2023年5月28日
    00
  • 详谈vue中的rules表单验证(常用)

    详谈vue中的rules表单验证(常用) Vue中的表单验证是常见的一种交互操作,可以帮助我们检验用户输入的数据是否符合要求,并且在数据有误的情况下,给出相应的提示。 Vue中表单验证的实现方式主要有两种:手写验证函数和使用第三方表单验证库。 在Vue中,常见的表单验证方法是通过在form表单中添加rules属性来实现的,下面我们来看看这个方法到底是怎么实现…

    Vue 2023年5月27日
    00
  • vue如何使用el-table遍历循环表头和表体数据

    当我们需要在Vue项目中显示表格数据时,我们可以使用 Element UI 提供的 el-table 组件。在使用 el-table 组件时,经常会遇到需要遍历循环表头和表体数据的情况。下面是详细的步骤: 1. 安装 Element UI 首先,我们需要安装 Element UI。打开终端并运行以下命令: npm install element-ui –s…

    Vue 2023年5月28日
    00
  • Vue父组件调用子组件函数实现

    下面是详细讲解如何通过Vue父组件调用子组件函数实现: 步骤一:创建子组件 在Vue中,我们通过Vue.component来创建一个组件。创建子组件的代码示例: Vue.component(‘child-component’, { methods: { childFunc() { console.log(‘子组件函数执行’) } } }) 在以上示例中,我们…

    Vue 2023年5月28日
    00
  • 详解微信小程序框架wepy踩坑记录(与vue对比)

    接下来我将详细讲解一下“详解微信小程序框架wepy踩坑记录(与vue对比)”这篇文章的完整攻略。 标题 首先,文章的标题应该清晰、明确、准确地概括文章的主题内容,能够体现文章的重点和亮点。 引言 在引言中,应该简要介绍wepy框架和vue框架,并指出其优缺点。 体 在主要内容的部分,应该详细讲解wepy框架的使用、踩坑记录和与vue框架的对比。需要突出wep…

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