actions
Vuex에서는 비동기식입니다. 호출 함수 (동작 개시 자)가 동작이 완료되었음을 알 수 있도록하는 유일한 방법은 Promise를 반환하고 나중에 해결하는 것입니다.
예를 들면 다음과 같습니다.를 myAction
반환하고 Promise
, http 호출을 수행하고, Promise
나중을 확인 하거나 거부합니다. 모두 비동기 적으로
actions: {
myAction(context, data) {
return new Promise((resolve, reject) => {
// Do something here... lets say, a http call using vue-resource
this.$http("/api/something").then(response => {
// http success, call the mutator and change something in state
resolve(response); // Let the calling function know that http is done. You may send some data back
}, error => {
// http failed, let the calling function know that action did not work out
reject(error);
})
})
}
}
이제 Vue 구성 요소가를 시작 myAction
하면이 Promise 개체를 가져와 성공 여부를 알 수 있습니다. 다음은 Vue 구성 요소의 샘플 코드입니다.
export default {
mounted: function() {
// This component just got created. Lets fetch some data here using an action
this.$store.dispatch("myAction").then(response => {
console.log("Got some data, now lets show something in this component")
}, error => {
console.error("Got nothing from server. Prompt user to check internet connection and try again")
})
}
}
위에서 볼 수 있듯이,을 위해 매우 유용합니다 actions
를 반환 Promise
. 그렇지 않으면 액션 개시자가 무슨 일이 일어나고 있는지 그리고 사용자 인터페이스에 무언가를 보여줄만큼 안정된시기를 알 수있는 방법이 없습니다.
그리고 마지막 메모 mutators
-당신이 올바르게 지적했듯이 그들은 동 기적입니다. 그들은에서 항목을 변경 state
하고 일반적으로에서 호출됩니다 actions
. 혼합 할 필요가 없습니다 Promises
으로 mutators
는 AS, actions
그 부분 핸들.
편집 : 단방향 데이터 흐름의 Vuex주기에 대한 내 견해 :
this.$store.state["your data key"]
구성 요소에서 와 같이 데이터에 액세스하는 경우 데이터 흐름은 단방향입니다.
작업의 약속은 구성 요소에 작업이 완료되었음을 알리는 것입니다.
구성 요소는 위 예제의 약속 해결 기능에서 데이터를 가져 오거나 ( $store.state["your data key"]
단방향이 아니므로 권장하지 않음) 직접 단방향이고 vuex 데이터 수명주기를 따릅니다.
위의 단락은 Vue.set(state, "your data key", http_data)
http 호출이 작업에서 완료되면 mutator가를 사용한다고 가정합니다 .