2016-07-15 4 views
23

상품 목록이있는 상점이 있습니다. 내 앱이 처음으로로드 될 때 항목을 기반으로 메모리 내 객체를 만드는 것처럼 항목을 비 직렬화해야합니다. 항목은 내 redux 저장소에 저장되고 itemsReducer에 의해 처리됩니다.redux-saga의 getState?

부작용으로 deserialization을 처리하기 위해 redux-saga을 사용하려고합니다. 첫 페이지로드에서 나는 작업을 파견 :

내 무용담은 단순히 설정
dispatch(deserializeItems()); 

:

내가 메모리 버전을 만드는 부작용을 처리하는 내 역 직렬화 사가에서는
function* deserialize(action) { 
    // How to getState here?? 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 

function* mySaga() { 
    yield* takeEvery('DESERIALIZE', deserialize); 
} 

내 항목 중 기존 데이터를 상점에서 읽어야합니다. 나는 그것을 여기에서하는 방법을 모르거나 그것이 내가 redux-saga로 시도해야하는 패턴이라면.

답변

81

당신은 우리 경우 코드 흐름이 처리되지 않을 때

const getItems = state => state.items; 

function* deserialize(action) { 
    const items = yield select(getItems); 
    .... 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 
0

선택 효과가 콜백 기능에 도움이되지 않습니다 당신이 선택기로 사용할 수 있습니다 또한 select effect

import {select, ...} from 'redux-saga/effects' 

function* deserialize(action) { 
    const state = yield select(); 
    .... 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 

사용할 수 있습니다 사가. 이 경우 단지 루트 사가에 dispatchgetState을 통과 : 시계 방법에 다음 아이의 무용담

export default function* root(dispatch, getState) { yield all([ fork(loginFlow, dispatch, getState), ]) }

store.runSaga(rootSaga, store.dispatch, store.getState) 

그리고 패스 매개 변수를 그리고

export default function* watchSomething(dispatch, getState) ...