Redux-сага, как передать параметры для запроса внутри саги - PullRequest
0 голосов
/ 22 марта 2020

У меня есть код, который я должен обновить. Это не мой код, поэтому я не хочу слишком много изменений. Использует Редукс-сагу и топор ios. Я хочу передать некоторые аргументы саге

моей саге в саг. js

export function* getInfoSaga() {
    while (true) {
        yield take(mutations.GET_INFO);
        const url1 = `${url}/api/getInfo/1-100`;
        const logInfo = yield axios.get<any>(url1).then(response => response);
        yield put(mutations.setInfo(logInfo.data.data));
    }
}

мутации. js

export const GET_INFO = 'GET_INFO';

export const getInfo = () => ({
    type: GET_INFO,
});

Саги запускаются в пределах индекса . js

const s = sagas as any;

for (const saga in s) {
    sagaMiddleware.run(s[saga]);
}

И в каком-то файле действие выполняется по кнопке с событием:

 onClick={() => dispatch({
                        type: 'GET_INFO',
                    })}

Я хотел передать некоторые параметры для изменения URL запроса, я попытался получить дополнительный объект в запросе dipatch и добавить аргументы к генераторам в sagas. js и mutatuions. js Однако, я получил ошибку с не может получить доступ к свойствам неопределенных

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

ОБНОВЛЕНО: передать полезную нагрузку и просто присвоить возвращаемое значение из 'take'

onClick={() => dispatch({
  type: 'GET_INFO',
  payload: {
    key1: value1
    // other values here
  }
})}

export function* getInfoSaga() {
   const action = yield take(mutations.GET_INFO);
   // action.payload.key1
}
1 голос
/ 22 марта 2020

Вы пробовали:

onClick={() => dispatch({
  type: 'GET_INFO',
  url: 'your/url/goes/here'
})}

export function* getInfoSaga(action) {
    while (true) {
        yield take(mutations.GET_INFO);
        const url1 = `${action.url}/api/getInfo/1-100`;
        const logInfo = yield axios.get<any>(url1).then(response => response);
        yield put(mutations.setInfo(logInfo.data.data));
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...