2016-07-05 9 views
0

In einer universellen App, die Authentifizierung behandeln, müssen wir jeden Benutzer mit seinen eigenen Cookies berücksichtigen. Also müssen wir sein anfängliches Anfrageobjekt speichern, um seine zukünftigen API-Aufrufe mit seinen Cookies dekorieren zu können. Ich sehe nicht, wie man es mit Redux-Saga behandelt, ich denke, die Arbeit sollte in einer benutzerdefinierten Middleware durchgeführt werden, um ein Objekt zu injizieren, das das Benutzeranforderungsobjekt in jede Saga einwickelt, zumindest denke ich, dass es den Job machen würde. aber ich sehe nicht, wie ich es vollständig erreichen kann.Wrap Benutzer Req in einer benutzerdefinierten API in Redux-Saga für Serverseite

ich über so etwas dachte:

export function* loadUser(action, api) { // Inject the object that wrap the initial user request object here 
    try { 
    const user = yield call(api.loadUser, action.payload); // So the request would be decorated behind this call 
    yield put(actions.loadUserSuccess(user)); 
    } catch(e) { 
    yield put(actions.loadUserFail(e)); 
    } 
} 

export default function* rootUserSagas() { 
    yield* takeLatest(LOAD_USER_REQUEST, loadUser); 
} 

Ich denke, es etwas, wenn das Geschäft

export function configureStore(initialState = {}, req) { 
    const api = new Api(req); 

    // Then what to do with the api object to get it back into sagas? 

    const sagaMiddleware = createSagaMiddleware(); 

    const store = createStore(
    rootReducer, 
    initialState, 
    applyMiddleware(sagaMiddleware) 
); 

    sagaMiddleware.run(rootSaga); 

    return store; 
}; 

Antwort

2

Erstellen zu tun ist, können Sie die api-Objekt zur Lauf Funktion übergeben

sagaMiddleware.run(rootSaga, api) 

Dann übergeben Sie das Objekt an Kind sagas

export default function* rootUserSagas(api) { 
    yield* takeLatest(LOAD_USER_REQUEST, loadUser, api); 
} 

// loadUser will receive the action in the last position 
function* loadUser(api, action) { ... } 
+0

Diese Antwort in der Dokumentation: https://redux-saga.js.org/docs/api/index.html#middlewarerunsaga-args –