ответ Гиотсхады имеет большой смысл. Redux - очень полезный способ решения этой проблемы путем сохранения глобального состояния, и такая проблема является хорошим примером того, как Redux предоставляет полезное дополнение к Apollo.
При этом я не хотел настраивать Redux для одной маленькой вещи, поэтому я продолжил работать над этой проблемой и нашел способ решить эту проблему, не добавляя избыточности для тех, кто заинтересован.
Чтобы обновить загрузку на экране B после переключения с экрана A, я снова вызываю navigation.navigate с обновленным значением, но только после переключения на ScreenB.
const [navigatedToScreenB, toggleNavigatedToScreenB] = useState<boolean>(false);
useEffect(() => {
if(navigatedToScreenB) {
navigation.navigate(ScreenB, { loading });
}
}, [loading])
Поскольку я хочу выполнять дальнейшую навигацию к ScreenB, при загрузке изменений важно добавить loading
в качестве зависимости useEffect.
И в функции onPress переключать на ScreenB я делаю:
onPress={() =>
{
toggleNavigatedToScreenB(true);
navigation.navigate(ScreenB, { toggleNavigatedToScreenB });
}
}
Передав toggleNavigatedToScreenB на ScreenB, я могу предупредить ScreenA о том, что я больше не на экране B, чтобы остановить навигацию при загрузке изменений. Если бы я должен был изменить экран чтобы прекратить переход к ScreenB.Таким образом, например, в кнопку «Назад» ScreenB, я бы добавил:
onPress={() =>
{
toggleNavigatedToScreenB(false);
navigation.goBack();
}
}
Я признаю, что это гораздо более замысловато, чем Redux, но я заставил его работать, поэтому я хотел бы поделиться этим решением для тех, у кого такая же проблема.