gpt4 book ai didi

vue.js - 如何使用axios从vuex中的API获取数据?

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:31 25 4
gpt4 key购买 nike

我有从 API laravel 获取的数据,这是我在 state.js 中的代码

import axios from 'axios'
import {apiPostGet} from '../api/api'
export default {
data: axios({
method: 'GET',
url: apiPostGet('Kategori')
}).then(
response => {
return response.data.kategori
}
).catch(
error => {
return error.response
}
)
}

这是我在 gteeters.js 中的代码

export default {
datas: state => {
return state.data
}
}

这是我在 index.js 中的代码

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'

Vue.use(Vuex)

export default new Vuex.Store({
state,
getters
})

and this picture from dev tool vue js

最佳答案

Data 钩子(Hook)需要同步返回。您必须将加载添加到 createdmounted 并将属性添加到数据/状态,以便 react 性正常工作。

使用 Axios 加载数据需要通过操作触发,因为它是异步的。突变需要同步运行。我在 created 中添加了初始加载。 (mounted 也可以。)

我使用 Vuex 助手 mapState 将状态属性映射到组件。使用 getter 也可以,但 mapState 更容易编写。

请看下面的演示或这个 fiddle .

同时在 fiddle 中取消注释 Vuex 版本下方的代码并注释上方的应用程序以查看 Axios 如何在没有 Vuex 的情况下工作以便更好地理解。

const URL = 'https://jsonplaceholder.typicode.com/posts';

const store = new Vuex.Store({
state: {
posts: [],
loading: true
},
actions: {
loadData({
commit
}) {
axios.get(URL).then((response) => {
// console.log(response.data, this)
commit('updatePosts', response.data)
commit('changeLoadingState', false)
})
}
},
mutations: {
updatePosts(state, posts) {
state.posts = posts
},
changeLoadingState(state, loading) {
state.loading = loading
}
}
})

new Vue({
el: '#app',
computed: Vuex.mapState(['posts', 'loading']),
store,
created() {
//console.log(this.$store)
this.$store.dispatch('loadData') // dispatch loading
}
})

/*
//example with-out vuex

new Vue({
el: '#app',
data() {
return {
loading: true,
posts: [] // add posts here so reactivity is working, also undefined would be OK
}
},
created() {
//this.loading = true --> not needed already set in data
axios.get(URL).then((response) => {
// console.log(response.data, this)
this.posts = response.data
this.loading = false
})
}
})

*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.17.1/axios.js"></script>
<div id="app">
<div v-if="loading">
loading...
</div>
<div v-else>
<ul>
<li v-for="post in posts">
<h1>
{{post.title}}
</h1>
<p>
{{post.body}}
</p>
</li>
</ul>
</div>
</div>

关于vue.js - 如何使用axios从vuex中的API获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com