Redux-thunk에 대해 핸들러가 호출 할 함수를 디스패치하면 직접 호출하지 않는 이유는 무엇입니까?

제레미 L

내가 알고있는 것처럼 redux-thunk, 그것은 할 수있다

<button onClick={fn1}>Click Me</button>

과에는 fn1,이 액션 객체가 아닌 전달하지만, 함수를 전달 fn2때 그래서, redux-thunk미들웨어를 호출 (의미 fn2호출) fetch또는 Ajax 호출 및하자 then등의 이행 핸들러 또는 아약스의 콜백 액션 객체를 전달

{ type: "DATA_RECEIVED", data: data }

하지만 왜 작업을 fn1직접 호출 하지 않고 fn2미들웨어가 대신 호출하게 하는가?

제로 298

Redux Thunk는 Redux가 비동기 프로세스를 처리하는 방법을 알아야하는 규칙을 도입 매우 얇은 미들웨어 (예 : 14 줄)입니다.

당신은 말했다

문제는 fn2가 즉시 실행되기를 원한다는 것입니다. 예 : 사용자가 버튼을 클릭하여 무언가를 가져 오면 가져 오기 또는 Ajax를 수행하는 기능이 즉시 실행되기를 원합니다. redux-thunk를 사용하면 함수를 디스패치하면 즉시 실행됩니다.

당신 말이 맞습니다, 당신 그것이 즉시 실행되기를 원하지만, 수동으로 함수를 호출하고 디스패치를 ​​전달하는 사람이되기를 원합니까, 아니면 Redux Thunk가 당신을 위해 그것을하기를 원합니까?

어쨌든 Redux는 나중에 작업을 발송해야합니다. Redux Thunk는 "나중에"작업을 수행합니다.

다음 차이점을 고려하십시오.

const store = {
  dispatch() {
    console.log("Dispatch");
  }
};

// Action creator that retuns an action
const inc = () => ({
  type: "INCREMENT"
});

// Impure action creator that you shouldn't use
const badAsyncInc = () => {
  setTimeout(() => {
    store.dispatch({
      type: "INCREMENT"
    });
  }, 1000);
};

// Action creator that returns a function that takes dispatch as arg
const aInc = () => dis => setTimeout(() => dis({
  type: "INCREMENT"
}), 1000);

/*
 * The following will do everything including waiting to dispatch
 * and dispatching to the store.  That's good, but not good for
 * when we want to use a different store.
 */
badAsyncInc()();

/*
 * The following is the "manual" way of wiring up the delayed
 * dispatch that you have to do without Redux Thunk.
 */
aInc()(store.dispatch);

/*
 * With Redux Thunk, this will call the "fn2" immediately but also
 * pass the dispatch function to "fn2" for you so that you don't 
 * have to wire that up yourself.
 */
store.dispatch(aInc);

이 경우, 당신은 당신을 부를 badAsyncInc것이기 때문에 당신은 단지 전화 하고 끝낼 store.dispatch수 있습니다. 하지만 여러 매장이 있다면 어떨까요? 테스트 하네스 매장을 사용하려면 어떻게해야합니까? 상점을 완전히 조롱하고 싶다면? 당신 badAsyncInc은 이제 액션 제작자에게 나쁜 상점과 결합되었습니다.

또는 aInc자신을 호출 하고 디스패치 함수를 전달할 수 있습니다. 그러나 다른 모든 액션 제작자가 아마도 store.dispatch(actionCreator()). Redux Thunk는 비동기 작업에서도 해당 패턴을 유지하는 데 도움이됩니다.

Redux Thunk는 느슨하게 결합되고 테스트 가능한 액션 제작자를 작성하도록 도와줍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관