2016-10-01 2 views
0

docs에서 Dan은 디스패치가 미들웨어로 전달되는 방식을 변경하는 데 많은 이유를주지 않습니다. 그는 단지 다음과 같이 말합니다 :redux store의 dispatch 인스턴스를 매개 변수로 전달 대신 전달

하지만 체인을 사용하는 다른 방법이 있습니다. 미들웨어 은 대신 저장소 인스턴스에서 next() 디스패치 함수를 매개 변수로 받아 들일 수 있습니다.

왜 그럴까요? 나에게 단지 applyMiddleware 안에있는 코드가 단지 저장하는 것이 아니라 상점과 파견으로 2 가지의 논쟁을 취할 것이기 때문에 더욱 이상해 보인다.

답변

2

이상하게 보는 것이 문제가되지 않습니다.

const logger = store => next => action => { 
    console.log('dispatching', action) 
    let result = next(action) 
    console.log('next state', store.getState()) 
    return result 
} 

기능적 언어는 기본적으로이 형식을 사용하며 완전히 정상입니다.

이렇게하는 이유는 원숭이 패치가 권장 프로그래밍 방법으로 자리 매김하지 않았기 때문입니다. next을 함수에 전달하는 것은보다 유연하며 호출되는 함수 (개발자 함수)를 필요로하지 않으므로 개발자의 부담을 줄이고 오류 가능성을 낮 춥니 다.

마지막으로 Dan은 자신이 특정 방식으로 코딩하는 이유를 설명하고 싶지만 lib 사용자는 개발자가 낮은 의사 결정권자가 아닙니다. decision has already been made 이것은 Redux에서 미들웨어를 사용하는 방법입니다. Redux를 포크하고 원하는대로 수정할 수 있지만 Redux의 기능은 lib 안에있는 코드가 아니라 타사 개발자가 첨부 한 코드입니다. 함께 놀지 않으면, 당신은 모든 힘을 잃을 것입니다.

1

자주 묻는 질문이며 곧 Redux FAQ에 추가 할 질문입니다.

짧은 대답은 Redux가 기능 프로그래밍 원칙의 영향을 크게 받았으며 초기 프로그래밍을 수행하는 동안 Dan과 Andrew가 해결 한 접근 방식이었습니다. 일단 그것이 선택되면, 그것은 호환성을 위해서 기본적으로 유지됩니다.

원래 디자인은 Redux issue #55에서 논의되었으며 Dan은 다시 쓰기를 제안한 다음 issue #1744에 자신의 제안을 거부했습니다.