반응형
Axios 호출 후 Vuex 상태를 업데이트하는 방법
Nuxt 앱을 만들고 있으며 로컬 호스트에서 실행 중인 노드 백엔드에서 데이터를 가져오고 있습니다.
getApps.js 플러그인이 있습니다.
export default ({ store }) => {
store.dispatch('getApps')
}
이는 Vuex에서 getApps 액션을 호출하는 것입니다.
actions: {
getApps (context) {
const {commit, state} = context
commit('setLoading', true)
let url = `apps?limit=${state.loadLimit}&page=${state.page}`
if (state.query)
url = `${url}/q=${state.query}`
this.$axios.get(url)
.then((res) => {
const apps = res.data.apps
console.log(apps)
commit('addApps', apps)
commit('setPage', state.page + 1)
commit('setLoading', false)
})
}
...
단, addApps 변환 후 console.log는 실제로 앱 목록을 반환합니다.
addApps (state, payload) {
state.apps = payload
}
그리고 이게 주(州)의 정의입니다.
state: () => ({
apps: [],
query: '',
loading: false,
filters: [],
loadLimit: 25,
page: 1,
showFilters: true,
currentUser: null,
showLoginModal: false,
showCreateAppModal: false
})
상태가 업데이트되지 않습니다.제가 알기로는, 이것은 비동기적인 행동 때문입니다.또한 액션을 비동기 중심으로 정리하여 Axios 콜 앞에 대기하도록 했습니다만, 동작하지 않았습니다.
왜 이런 일이 생기는 건가요?코드를 어떻게 구성하면 작동합니까?
문제는 네가 Promise를 몰랐다는 거야.액션이 비동기 HTTP 요청을 호출하지만 호출하지 않았습니다.await
바로 그거에요.
그리고 플러그인 섹션의 Promise도 알아야 합니다.이 문제에 대한 해결책은 매우 간단합니다.await
.
플러그인/getApps.js
export default async ({ store }) => {
await store.dispatch('getApps')
}
스토어/...
함수를 만들 수 있습니다.async
,그리고.await
또는 액션에서 Promise를 반환할 수 있습니다.
actions: {
getApps (context) {
...
return this.$axios.get(url)
.then((res) => {
const apps = res.data.apps
commit('addApps', apps)
...
})
},
...
}
또는
actions: {
async getApps (context) {
...
await this.$axios.get(url)
.then((res) => {
const apps = res.data.apps
commit('addApps', apps)
...
})
},
...
}
언급URL : https://stackoverflow.com/questions/54055360/how-to-make-vuex-state-update-after-axios-call
반응형
'IT이야기' 카테고리의 다른 글
JavaBean과 POJO의 차이점은 무엇입니까? (0) | 2022.06.13 |
---|---|
컴포넌트가 직접 변이를 커밋해야 합니까? (0) | 2022.06.13 |
nexttick 후에도 vue가 데이터를 업데이트하지 않는 이유는 무엇입니까? (0) | 2022.06.12 |
Vue Full Calendar의 다음 달 및 이전 달 감시자 (0) | 2022.06.12 |
보이드의 크기는 얼마입니까? (0) | 2022.06.12 |