• [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
  • 相关阅读:
    jdk和jre有什么区别?
    Apache的作用及意义
    博客园新成员的第一天
    重构改善既有代码的设计--简化条件表达式
    SourceMonitor: 代码重构的小工具,大用场
    使用Eclipse中提供的Refactor(重构)工具
    极大提高Web开发效率的8个工具和建议(含教程)
    Hbase shell命令
    Java多线程-新特性-有返回值的线程
    Java多线程-新特征-条件变量
  • 原文地址:https://www.cnblogs.com/Answer1215/p/7236480.html
Copyright © 2020-2023  润新知