2016-06-16 6 views
1

redux-loop를 사용하여 내 reducers에서 작업 작성자를 호출하고 있습니다. 이것은 정상적으로 훌륭하게 작동합니다.뱀 동작 작성자와 함께 redux-loop 사용

그러나 일부 액션 창작자에게도 썽크를 사용하고 있습니다. 정기적 인 액션 크리에이터를 타고 썽크로 변환하면 redux-loop에서 더 이상 사용할 수 없습니다.

감속기의 redux-loop에서 썽크를 호출 할 수있는 방법이 있습니까?

답변

0

향상 자에서 install보다 먼저 applyMiddleware을 전달하는 것이 좋습니다.

createStore(reducer, initialState, compose(
    applyMiddleware(thunk), 
    install() 
)); 

applyMiddelware는 REDUX 루프 그들을 파견 시도하기 전에 store.dispatch()에 전달 작업을 잡을 것입니다. 지금 redux 루프의 다음 버전에 대해서는 install()이 문제의 결과가되지 않도록 자체 수정을 적용하기 전에 저장소의 다른 인핸서를 허용 할 계획입니다.

+0

이 작동하지 않습니다

import { applyMiddleware, compose } from 'redux' import { install } from 'redux-loop' export default function loopWithThunk(createStore) { let enhancedStore const storeSaver = (createStore) => (reducer, initialState) => { enhancedStore = createStore(reducer, initialState) return enhancedStore } const thunkMiddleware =() => next => action => { return (typeof action === 'function') ? action(enhancedStore.dispatch, enhancedStore.getState) : next(action) } return compose( storeSaver, install(), applyMiddleware(thunkMiddleware) )(createStore) } 

당신은 다음과 같이 사용할 수 있습니다 :

이 문제를 해결하려면, 나는 다음과 같은 꽤 해키 저장 증강을 작성하는 데 필요한 썽크를 액션에서 파견하는 것은 그들에게 전달 된 파견 작업이 썽크 미들웨어로 아직 향상되지 않았기 때문입니다. 이 문제를 해결하기 위해 내 자신의'loopWithThunk' 미들웨어를 작성해야했습니다. – denisw

0

나는 redux-loop와 redux-thunk를 그대로 결합한 운이 없었습니다. 문제는 applyMiddleware(thunk)을 먼저 호출하고 redux-loop의 install()을 나중에 호출하면 썽크에 의해 전달 된 작업은 효과가 평가되지 않습니다 (미들웨어에 의해 dispatch이 썽크로 전달 되었기 때문에 redux-loop가 아직 향상되지 않았 음). 두 개를 바꿔 쓰면 효과가 썽크를 보낼 수 없습니다. 왜냐하면 dispatch 리덕션 루프 사용 효과는 썽크 미들웨어로 향상되지 않기 때문입니다. 당신이 원하는 경우

const store = createStore(reducer, loopWithThunk)