Redux Saga - диспетчеризация действия из функции вызова - PullRequest
0 голосов
/ 25 июня 2018

Есть ли в redux saga способ отправить действие из функции, вызываемой эффектом call, в глобальное хранилище?

например:

export function* login({ payload }) {
  try {
    // from API.post I want to be able to dispatch an action that I will handle in a different saga.
    const resp = yield call(API.post, 'api/1/login', {
      email: payload.email,
      password: payload.password,
    });
   yield put(AuthActions.loginSuccess(resp.token));
 } catch (error) {
   yield put(AuthActions.loginError(error));
 }
}

Я знаю, что могу использовать сагу channel, но если я передаю канал в API.post, я должен использовать take(channel), и я хочу обработать это действие в другом файле, чтобы у меня не было доступа к этому каналу. И я также не уверен, что хочу экспортировать канал и импортировать его в другой файл, потому что я хочу, чтобы каждая сага была независимой.

Что я могу сделать?

1 Ответ

0 голосов
/ 25 июня 2018

Одной из возможностей является создание функции-оболочки для API вызовов. Как это:

// `apiRequest` dispatches `anotherAction` and calls given `apiCall` 
function* apiRequest(apiCall, ...args) {
  yield put(anotherAction())
  yield call(apiCall, ...arg)
}

export function* login({ payload }) {
  try {
    const resp = yield apiRequest(API.post, 'api/1/login', {
      email: payload.email,
      password: payload.password,
    })

    yield put(AuthActions.loginSuccess(resp.token))
  } catch (error) {
    yield put(AuthActions.loginError(error))
  }
}
...