vue.js - vue3 组合 api 中的 vuex 模块 axios

标签 vue.js axios vuex dispatch vue-composition-api

我是 vue 的新手,正在使用 vue 3 和组合 API。很难找到与组合 API 相关的东西,所以我尝试在这里寻求帮助。我将 axios 与 vuex 模块结合使用来使用 API。

如何将此代码从选项 API 转移到组合 API?

TestApi.js

import axios from 'axios'
const posts = {
namespaced: true,
state: {
    posts: []
},
mutations: {
    SET_POSTS(state, data){
        state.posts = data
    }
},
actions: {
    loadPosts({commit}) {
        axios
            .get('https://jsonplaceholder.typicode.com/posts')
            .then( res => {
                commit('SET_POSTS', res.data)
            } )
            .catch(error => console.log(error))
    }
},
getters: {
    getPosts(state){
        return state.posts
    }
}
}
export default posts

App.vue

<template>
<div class="post" v-for="post in getPosts" :key="post.id">
    
      <h1>{{ post.title }}</h1>
      <p>{{ post.body }}</p>

  </div>
</template>

<script>

import { mapGetters } from 'vuex'
import { computed } from 'vue'


export default {
  computed: {
  ...mapGetters('posts', ['getPosts'])
  },
  created(){
  this.$store.dispatch('posts/loadPosts')
  }
}

</script>

<style>
  .post{
    margin-bottom: 20px;
  }
</style>

我试过这样的事情。但它不起作用:

import { useStore } from 'vuex'
import { computed } from 'vue'

export default {
    setup(){
      getData();
      const store = useStore()
      function getData(){
        store.dispatch('posts/loadPosts');
      }
      const getPosts = computed(() => store.getters['getPosts'])
      return{ getPosts }
   }
}

错误:未捕获( promise )TypeError:无法读取未定义的属性"dispatch"

最佳答案

您应该在初始化商店后运行该函数:

    setup(){
      
      const store = useStore()
       getData();
 ...

关于vue.js - vue3 组合 api 中的 vuex 模块 axios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68908674/

相关文章:

javascript - 如何在 JavaScript 的循环中处理异步代码?

vue.js - 在使用 vue + vuex 进行开发时使用模拟数据

javascript - Vee 验证在 vue 设置后获取先前的值

vue.js - 如何将 Emit 与 v 模型一起使用?

vue.js - 如何从 Vue3 中的 &lt;script setup> 访问 &lt;script&gt; 中的名称?

javascript - 运行NUXT.js和Axios时如何避免代码重复?

laravel - Vue axios 向错误的 URL 发出请求

typescript - 在 router.ts 中访问 Vuex store 模块的状态

javascript - 在 vuejs 中重新渲染之前调用问题函数

vue.js - 无法使用 Vue-Chartjs(或任何其他插件)触发 beforeDraw