Redux_Saga. Как передать функцию в качестве аргумента для вложенного генератора? - PullRequest
0 голосов
/ 07 мая 2018

Итак, я хочу выдвинуть некоторую функцию setupSocket в качестве аргумента для выполнения внутри вложенного Генератора createSaga, но теперь я не могу понять, как я могу это сделать?

Внутри родительского генератора mySaga setupSocket отображается нормально, но внутри createSaga nope ...

import { takeEvery, put, call, take } from 'redux-saga/effects'; 
import { delay } from 'redux-saga';
import { addMessage, addUser } from '../actions'
import * as constants from '../constants'

function* createSaga(action, setupSocket) {
    try {
        console.log(setupSocket); // not good
        yield put(addMessage(action.message, action.author, action.photo));
        yield put(addUser(action.author, action.photo));
    } catch (e) { 
        console.log(e) 
    }
};

function* mySaga(setupSocket) {
    console.log(setupSocket); // all good
    yield takeEvery(constants.ADD_DATA, createSaga);
};

export default mySaga;

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете передать дополнительные аргументы takeEvery, которые будут переданы в сагу.

function* createSaga(setupSocket, action) {
    console.log(setupSocket); // should now be good
    ...
};

function* mySaga(setupSocket) {
    yield takeEvery(constants.ADD_DATA, createSaga, setupSocket);
};

Если вы передадите некоторые аргументы, action будет всегда последним, поэтому мне пришлось поменять местами action и setupSaga порядок в аргументах createSaga саги.

https://redux -saga.js.org / Docs / API / # takeeverypattern-сага-арг

...