Redux-saga setContext недоступен в других сагах

Не уверен, что я здесь делаю не так, просто хочу, чтобы контекст был доступен из всех саг.

// Saga.js
function* test1() {
  const foo = yield getContext('foo');
  if (!foo) yield setContext({ foo: 'bar' });
  const test = yield getContext('foo');
  console.info(test); // Correct 'bar'.
}

function* test2() {
  const getFooValue = yield fork(test1); // This doesnt return getContext or the context value of foo
  // Do stuff here.
}

И промежуточное ПО

// TheStore.js
const sagaMiddleware = createSagaMiddleware({
  context: {
    foo: '',
  },
});

const TheStore: Store<ReduxState, *> = createStore(
  reducers,
  applyMiddleware(sagaMiddleware)
);

Если вы установите контекст в какой-либо саге, вы можете получить к нему доступ только в той же саге или в сагах, которые вы вызывали / разветвляли из первой. (соответственно в сагах глубже в стеке вызовов саги).

Martin Kadlec 26.10.2018 22:48

Спасибо за ответ. Я отредактировал код, поэтому я просто пытаюсь получить значение foo в саге test2. В test1 я хочу либо вернуть значение foo, если оно определено, либо определить его, а затем вернуть значение. После того, как foo был определен, я не хочу когда-либо переопределять его. Любая помощь приветствуется, или если есть какая-либо документация, это было бы здорово.

user1572796 28.10.2018 01:59
10 вопросов на собеседовании по React js
10 вопросов на собеседовании по React js
Вопрос: Что такое React JS? Каковы преимущества использования React?
1
2
1 011
1

Ответы 1

Если вы хотите вернуть значение foo, вы можете сделать:

// Saga.js
function* test1() {
  const foo = yield getContext('foo');
  if (!foo) yield setContext({ foo: 'bar' });
  const test = yield getContext('foo');
  console.info(test); // Correct 'bar'.
  return test;
}

function* test2() {
  const getFooValue = yield call(test1); // This will now return the value of foo
  // Do stuff here.
}

fork не будет ждать завершения test1 перед выполнением следующих строк кода. call дождется завершения test1 и получит возвращаемое значение.

Другие вопросы по теме