2016-07-15 74 views
23

我有一个商店的物品清单。当我的应用第一次加载时,我需要反序列化这些项目,就像根据这些项目创建一些内存中的对象一样。这些物品存储在我的零售店,并由itemsReducer处理。getState in redux-saga?

我试图用redux-saga来处理反序列化,作为一个副作用。在第一个页面加载,我派遣一个动作:

dispatch(deserializeItems()); 

我的传奇设置简单:

function* deserialize(action) { 
    // How to getState here?? 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 

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

在我反序列化的传奇,在这里我要负责创建内存版本的副作用我的项目,我需要从商店读取现有的数据。我不知道如何做到这一点,或者如果这是一种模式,我甚至应该尝试与REDX传奇。

回答

81

可以使用select effect

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

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

你也可以用选择使用它,如果我们

const getItems = state => state.items; 

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

选择效果并不能帮助我们在一个回调函数,当码流没有被处理由佐贺。在这种情况下只是通过dispatchgetState根传奇:

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

而且参数传递给孩子传奇

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

然后在腕表方法

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