디스패치가 완료될 때까지 리덕스 액션을 기다립니다.
다음 작업 작성자가 있습니다.
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}
}
문제는 말이다scrollToNextItemappendItem이 종료되기 전에 실행되며 스크롤 위치가 올바르지 않습니다.이것이 사실임을 증명할 수 있습니다.setTimeout스크립트 실행을 실행하기 전에 다음 체크 표시를 기다리도록 합니다.scrollToNextItem:
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
setTimeout(() => {
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}, 0);
}
}
어떻게 기다리죠?appendItem완료해야 할 액션표준 리액션 랜드에서 저는 그냥setState콜백:
this.setState({something: 'some thing'}, () => {
console.log('something is set');
});
그렇지만dispatch는 콜백 기능을 제공하지 않습니다.
append Item은 언제든지 약속으로 정리하여 통과시킬 수 있습니다.dispatch그것에 대한 논거로서
const appendItem = (item, dispatch) => new Promise((resolve, reject) => {
// do anything here
dispatch(<your-action>);
resolve();
}
그럼 이렇게 부르면 되겠네요.scrolltoNextItem
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
appendItem(Item, dispatch).then(() => {
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
})
}
}
언급URL : https://stackoverflow.com/questions/40946046/wait-for-a-redux-action-to-finish-dispatching
'programing' 카테고리의 다른 글
| 드롭다운 목록의 첫 번째 요소 비우기 (0) | 2023.04.05 |
|---|---|
| JavaScript에서 응답 본문을 다시 읽습니다. (0) | 2023.04.05 |
| 리액트를 사용하여 html 엔티티를 표시하는 방법 (0) | 2023.04.05 |
| 각도 js 애플리케이션을 위해 투영기에서 애니메이션을 비활성화하는 방법 (0) | 2023.04.05 |
| dom-testing-library 또는 react-testing-library에서 입력값을 테스트하는 최선의 방법 (0) | 2023.04.05 |