2016-09-20 8 views
2

では動作しません:Reduxの-サガは、私は以下のようにReduxの-サガを持って初めて

export function* loadApplianceSaga() { 
    try { 
    let {request, success, error} = yield take(ActionTypes.APPLIANCE.LOAD); 
    request.url = yield select(getResourceLink, request.resource); 
    const response = yield call(makeRequest, request); 
    if (!response.error) { 
     yield put({type: success, payload: response.body}); 
    } else { 
     yield put({type: error, payload: response}); 
    } 
    } catch (e) { 
    yield put({type: ActionTypes.REQUEST.CALL_ERROR, error: e}); 
    } 
} 

export function* watchLoadAppliance() { 
    while (true) { 
    yield* takeEvery(ActionTypes.APPLIANCE.LOAD, loadApplianceSaga); 
    } 
} 

とルートサガ:

export default function* rootSaga() { 
    yield [ 
    fork(watchLoadAppliance) 
    ] 
} 

私は問題に直面してることloadApplianceSaga doesnの初めての仕事。私は記録し、最初にそれが唯一のActionTypes.APPLIANCE.LOADアクションを派遣したことを見た後、アクションはディスパッチされません。しかし、2回目には、遂行されている成功行動または失敗した行動を見ることができます。

何が間違っているのか教えてください。前もって感謝します!

更新アクション

export const loadAppliances =() => { 
    return { 
    type: ActionTypes.APPLIANCE.LOAD, 
    request: { 
     resource: Resources.Appliances, 
     param: { 
     page: 0, 
     size: 5, 
     sort: 'name,desc' 
     }, 
     header: { 
     Accept: 'application/json' 
     } 
    }, 
    success: ActionTypes.APPLIANCE.LOAD_SUCCESS, 
    error: ActionTypes.APPLIANCE.LOAD_ERROR 
    } 
}; 
+0

を試してみてくださいアクションは{要求、成功、エラーを}含まれていますか? –

+0

はい、アクションにはすべてのアクションが含まれています。 –

+0

私はアクションを追加しました。 @Utro –

答えて

2

あなたはtake 2回使用されています。

export function* loadApplianceSaga(action) { 
    try { 
    let {request, success, error} = action; 
    request.url = yield select(getResourceLink, request.resource); 
    const response = yield call(makeRequest, request); 
    if (!response.error) { 
     yield put({type: success, payload: response.body}); 
    } else { 
     yield put({type: error, payload: response}); 
    } 
    } catch (e) { 
    yield put({type: ActionTypes.REQUEST.CALL_ERROR, error: e}); 
    } 
} 

export function* watchLoadAppliance() { 
    while (true) { 
    yield* takeEvery(ActionTypes.APPLIANCE.LOAD, loadApplianceSaga); 
    } 
} 
+0

ありがとうございました!それは動作します。なぜこの問題に会ったのか少し説明できますか?私はレジェクス・サガの新人です。 –

+0

私は思う、あなたは@AnNguyenアクションを変異させるべきではない –

+0

ああ、私はそれを検討します。ありがとう! –

関連する問題