Как изменить навигационные маршруты во время выполнения в React Native? (Реагировать Навигация 4) - PullRequest
0 голосов
/ 12 апреля 2020

Когда приложение запущено, пользователь может выбрать некоторые настройки, и на основании этих настроек bottomTabNavigator моего приложения должен изменить доступные значки и экраны. Сначала я инициализирую все экраны и все значки в bottomTabNavigator, но когда пользователь отключает некоторые параметры, нижний навигатор должен настроить.

Я попытался сделать это с помощью useContext - потому что мои настройки доступны глобально через ловушка контекста, но я сталкиваюсь с проблемой, когда мой контейнер приложения не перерисовывается после его первоначального запуска, поэтому контекст, используемый через useContext, больше не вызывается с его обновленными изменениями.

const navigatorInit = (settings) => { ... navigator setup that changes based on settings ... }
//This works if I manually change the settings before the app starts.
//But this function isn't called again during runtime.

export default App = () => {
  let tmpState = useContext(Context); //I need to do this
//and the segment below because it seems like Context is only created after this functional component
//has finished executing, which makes sense.

  if (tmpState !== undefined && tmpState !== null){
    console.log('tmpState is usable')
    const {state} = tmpState;
    tmpState = state;
  }

  const nav = navigatorInit(tmpState.settings)

  const AppContainer = createAppContainer(nav);
  return (
    <React.Fragment>
        <Provider>
            <AppContainer
                ref={(navigator) => {setNavigator(navigator)}}
            />
        </Provider>
    <React.Fragment>
  );
};

Я делаю пользовательский компонент bottomTabNavigator и могу получить доступ к Context из этого компонента, чтобы изменить макет значков, но я не могу изменить маршруты, которые были установлены при первоначальном создании приложения в createAppContainer. Конечным результатом этого (после того, как пользователь изменил свои настройки) является то, что правильные значки отображаются внизу, но навигация неверна. Пожалуйста, помогите.

...