반응형
Vuex에서의 디바운스 사용방법
하려고 합니다.debounce
외부 API가 필요한 Vuex 작업 내의 메서드.
// Vuex action:
async load ({ state, commit, dispatch }) {
const params = {
period: state.option.period,
from: state.option.from,
to: state.option.to
}
commit('SET_EVENTS_LOADING', true)
const res = loadDebounced.bind(this)
const data = await res(params)
console.log(data)
commit('SET_EVENTS', data.collection)
commit('SET_PAGINATION', data.pagination)
commit('SET_EVENTS_LOADING', false)
return data
}
// Debounced method
const loadDebounced = () => {
return debounce(async (params) => {
const { data } = await this.$axios.get('events', { params })
return data
}, 3000)
}
로그 출력은 다음과 같습니다.
[Function] {
cancel: [Function]
}
실제로 디버깅된 기능을 실행하는 것이 아니라 다른 기능을 나에게 반환하는 것입니다.
vuex 스토어에서 사용할 수 있는 커스텀 디바운스 방법을 제시하겠습니다.
let ongoingRequest = undefined;
const loadDebounced = () => {
clearTimeout(ongoingRequest);
ongoingRequest = setTimeout(_ => {
axios.get(<<your URL>>).then(({ data }) => data);
}, 3000);
}
이 방법을 사용하면 먼저 진행 중인 모든 작업이 취소됩니다.setTimeout
다시 실행할 수 있습니다.
이는 여기서 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/61066905/how-to-use-debounce-with-vuex
반응형
'programing' 카테고리의 다른 글
Java의 네이티브 키워드는 무엇입니까? (0) | 2022.08.15 |
---|---|
C코드 루프 퍼포먼스 [계속] (0) | 2022.08.15 |
Vuex: 복잡한 객체 및 상태 변경 기능 사용 (0) | 2022.08.15 |
C 구조 상속 포인터 정렬 (0) | 2022.08.15 |
Vuex getter에서 rootState에 액세스하는 중 (0) | 2022.08.15 |