programing

디스패치가 완료될 때까지 리덕스 액션을 기다립니다.

goodjava 2023. 4. 5. 21:48

디스패치가 완료될 때까지 리덕스 액션을 기다립니다.

다음 작업 작성자가 있습니다.

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