2016-12-09 3 views
0

in this answer에서 볼 수 있듯이 상태를 ActionCreator에 전달하는 것은 패턴 방지로 간주됩니다. 따라서 Redux Thunk Middleware로 상태에 액세스합니다. 다음과 같은 (인기있는) 시나리오를 해결하는 방법을 궁금합니다 :Reux Redux : 상태를 액션에 전달하는 것이 안티 패턴입니다. 해결책은 무엇입니까?

프론트 엔드의 검색 양식에있는 필터를 기반으로 서버에서 항목을 가져옵니다. 당연히, 나는 내 서버에 필터를 통과해야, 그래서 난 내 행동 작성자

export function getResults(filters){ 
    return Axios.get('localhost:80/getresults/',{params:filters}).then(
     // do something with results here. 
    ) 
} 

이하고 있어요 그러나 filters 가게에서오고 있기 때문에이 안티 패턴 간주됩니다.

또한, 나는 REDUX이 같은 썽크 사용할 수 있습니다

export function getResults(){ 
    return function(dispatch,getState){ 
     var filters = getState().reducer.filters; 
     return Axios.get('localhost:80/getresults/',{params:filters}).then(
     // do something with results here. 
    ) 
    } 
} 

이것은 또한 안티 패턴으로 간주됩니다 나는 상태에 접근하고 있습니다 때문이다.

그럼 어떻게 올바르게 구현할 수 있습니까? 아약스 전화를 전적으로 다른 곳에서해야하나요?

+0

행동 창조자가 상태에 직접 액세스해서는 안되는 것은 주창 한 아이디어입니다 (두 번째 접근 방법). 그러나 당신이 보여준 첫 번째 접근법 인 액션 창조자에게 어떤 주장 (주 또는 다른 대상의 일부)을 자유롭게 전달할 수 있습니다. – Ziumin

+0

@ Ziumin 대답은 "액션 크리에이터에서 state.something.items와 같은 데이터를 전달하는 것은 분명히 반 패턴이며 변경 기록을 가려 보이지 않으므로 권장하지 않습니다." 데이터를 액션에 전달하고, 액션 내에서 다른 액션으로 전달하지 말라는 의미입니까? – PoeHaH

+0

상태를 인수로 전달하면 동작이 상태와 독립적이되며 심지어 상태가 존재하는지도 모릅니다. 그리고 일부 조롱 된 필터를 쉽게 테스트 할 수 있습니다. 그러나 당신이 당신의 행동 창조자에게서 국가를 얻는다면 그것은 상태가된다. 이것은'add (2)'와'add (2, 2) '와 같습니다. 어느 것이 더 쉽게 테스트 할 수 있습니까? 그리고 어떤 결과를 쉽게 예측할 수 있습니까? – Ziumin

답변

0

나는 댄을 존경하는만큼 나는 그의 의견에 동의하지 않습니다. 나에게 썽크로 상태에 액세스하는 것은 실제로 액션을 파견할지 여부를 결정하거나 액션의 콘텐츠를 생성하는 데 도움이되는 기존 상태를 사용하는 데있어 절대적으로 유용한 도구입니다.

나는 귀하의 썽크 예제가 완벽하게 받아 들일 것이라고 말하고 싶습니다.