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
  • 相关阅读:
    null和undefined的区别
    【面试】前端面试题总结一(css)
    【js基础类】火狐的滚动事件
    【Vue】provide和inject
    React学习:react-router-dom-主要组件
    React学习:组合VS继承
    React学习:状态提升
    React学习:form表单
    unity+ARKit 捕捉表情录制动画 表情动画与人形骨骼动画融合
    Unity导入模型材质球无法编辑属性解决方法
  • 原文地址:https://www.cnblogs.com/Answer1215/p/7236480.html
Copyright © 2011-2022 走看看