2017-11-07 20 views
0

통제없이 감속기에서 돌아 오는 저장소 값을 액세스 : A의액션 작성자 나는 이상한 상황입니다

{ foo: true } 

: 페이지로드에서의 내 돌아 오는 저장소가 기본 값으로 수화됩니다 가정 해 봅시다

... 
case LOCATION_CHANGE: { 
    const deserialized = deserialize(action.payload.query, **foo**); 
    return { ...state, deserialized }; 
} 
... 

deserialize 기능 NE : 감속기, I 형 LOCATION_CHANGE의 행동에 내 상태를 업데이트 할 react-router-redux (또는 조치 유형에 행동 자체 만 제공 액세스를 전달 다른 라이브러리)을 사용하고 있습니다 그에 따라 내 상태를 업데이트하려면 foo 값을 수정하십시오. 일반적으로 액션 페이로드에 getState().foo을 추가 하겠지만 써드 파티 라이브러리이므로 액션 페이로드를 제어하지 않습니다. 제 3 자 라이브러리를 뜯어 낼 필요가없는이 문제에 대한 쉬운 해결 방법이 있습니까?

답변

1

나는 markerikson의 answer 가능하지만, 여기에 내가 결국 쓰기 미들웨어입니다 :

... 
case LOCATION_CHANGE: { 
    const deserialized = deserialize(action.payload.query, action.payload.foo); 
    return { ...state, deserialized }; 
} 
... 
:

const locationChangeMiddleware = store => next => action => { 
    if (action.type === LOCATION_CHANGE) { 
    const { foo } = store.getState(); 
    return next({ 
     ...action, 
     payload: { 
     ...action.payload, 
     foo, 
     }, 
    }); 
    } 

    return next(action); 
}; 

이제 내 감속기의 모습은