Не уверен, что я здесь делаю не так, просто хочу, чтобы контекст был доступен из всех саг.
// 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)
);
Спасибо за ответ. Я отредактировал код, поэтому я просто пытаюсь получить значение foo в саге test2. В test1 я хочу либо вернуть значение foo, если оно определено, либо определить его, а затем вернуть значение. После того, как foo был определен, я не хочу когда-либо переопределять его. Любая помощь приветствуется, или если есть какая-либо документация, это было бы здорово.
Если вы хотите вернуть значение 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 и получит возвращаемое значение.
Если вы установите контекст в какой-либо саге, вы можете получить к нему доступ только в той же саге или в сагах, которые вы вызывали / разветвляли из первой. (соответственно в сагах глубже в стеке вызовов саги).