zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    jsp_Scriptlet
    jsp_注释
    Http状态码详解
    Tomcat服务器的安装和配置
    【BZOJ 1018】线段树 **
    【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)
    【BZOJ 1969】 1969: [Ahoi2005]LANE 航线规划 (树链剖分+线段树)
    【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
    【UOJ 79】 一般图最大匹配 (✿带花树开花)
    【UOJ 34】 多项式乘法 (FFT)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/7236480.html
Copyright © 2011-2022 走看看