[Nuxt] Use Vuex Actions to Delete Data from APIs in Nuxt and Vue.js

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Nuxt] Use Vuex Actions to Delete Data from APIs in Nuxt and Vue.js相关的知识,希望对你有一定的参考价值。

You‘ll begin to notice as you build out your actions in Vuex, many of them will look quite similar. Creating a remove action looks almost the same as the add action except for using the axios.delete method then filtering out the deleted todo once the response comes back.

 

Add a remove button to the todo list:

<template>
  <div>
    <form @submit.prevent="add(task)">
      <input v-model="task" type="text" />
      <input type="submit" value="ADD">
    </form>
    <article class="pa3 pa5-ns">
      <ul class="list pl0 ml0 center mw6 ba b--light-silver br2">
        <li v-for="todo of todos" class="flex items-center ph3 pv3 bb b--light-silver">
          <span class="flex-auto">{{todo.id}} {{todo.task}}</span>
          <button @click="remove(todo)"><img src="https://icon.now.sh/trash" alt="delete"></button>
        </li>
      </ul>
    </article>
  </div>
</template>

<script>
  import { mapState, mapActions } from vuex
  import {init} from ./shared

  export default {
    fetch: init,
    computed: {
      ...mapState({
        todos: (state) => state.todos
      })
    },
    data () {
      return {
        task: Some data
      }
    },
    methods: {
      ...mapActions([
        add,
        remove
      ])
    }
  }
</script>

 

store/index.js:

import Vuex from vuex
import axios from axios

const store = () => new Vuex.Store({
  state: {
    todos: [
    ]
  },
  mutations: {
    init (state, todos) {
      state.todos = todos
    },
    add (state, todo) {
      state.todos = [
        ...state.todos,
        todo
      ]
    },
    remove (state, todo) {
      state.todos = state.todos.filter((t) => {
        return t.id !== todo.id
      })
    }
  },
  actions: {
    async add (context, task) {
      const commit = context.commit
      const res = await axios.post(https://todos-cuvsmolowg.now.sh/todos, {
        task,
        complete: false
      })
      commit(add, res.data)
    },
    async remove ({commit}, todo) {
      await axios.delete(`https://todos-cuvsmolowg.now.sh/todos/${todo.id}`)
      commit(remove, todo)
    }
  }
})

export default store

 

以上是关于[Nuxt] Use Vuex Actions to Delete Data from APIs in Nuxt and Vue.js的主要内容,如果未能解决你的问题,请参考以下文章

[Nuxt] Update State with Vuex Actions in Nuxt.js

Nuxt 等待异步 + vuex

Nuxt + Vuex - 如何将 Vuex 模块分解为单独的文件?

vuex-Actions的用法

vuex所有核心概念完整解析State Getters Mutations Actions

vuex源码简析