Как установить начальный экран в зависимости от первого запуска или нет? - PullRequest
0 голосов
/ 28 января 2020

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

Если пользователи запускают приложение впервые, оно переносит их на страницу «TourScreen1». Или «Feed».

, но приведенный ниже код не работает.

возвращает объект. Он должен возвращать строку.

Есть ли способ заставить этот код возвращать строку?

Или мне нужно использовать другой способ?

const Initial = createAppContainer(
  createSwitchNavigator(
    {
      Cover,
      TourScreen1,
      TourScreen2,
      TourScreen3,
      TourScreen4,
      Register: RegisterToLogin,
      Feed: TabNavigator
    },
    {
      initialRouteName: AsyncStorage.getItem("isLaunched").then(value => {
        if (value === null) {
          return "TourScreen1";
        } else return "Feed";
      })
    }
  )
);

Ответы [ 2 ]

1 голос
/ 28 января 2020

Поскольку createSwitchNavigator является синхронным, как сказал Сурадж, вы не можете дать динамическое c имя начального маршрута. Что я сделал, так это то, что я сделал заставку в качестве начальной страницы, и на этой странице просто было бы A * go вашего приложения, и в этом страница, которую вы могли бы иметь:

    class SplashScreen extends React.Component {
        constructor(){
            super();

        }
        componentDidMount(){
            AsyncStorage.getItem("alreadyLaunched").then(value => {
                if(value == null){
                     AsyncStorage.setItem('alreadyLaunched', true); // No need to wait for `setItem` to finish, although you might want to handle errors
                     this.props.navigation.navigate('FirstTimeScreen');
                }
                else{
                   this.props.navigation.navigate('UsualScreen');
                }}) // Add some error handling, also you can simply do 
        }
        render(){
           return(
<Image /> // image of app
)
    }

надеюсь, это поможет. не стесняйтесь сомнений

1 голос
/ 28 января 2020

getItem возвращает обещание, являющееся объектом, createSwitchNavigator является синхронным и не ожидает выполнения обещания getItem или отклонения до конца sh до его выполнения. Таким образом, обещание подается в ваш initialRoute, который является объектом, вызывающим ошибку.

При переходе к значениям dynamici c initialRoute невозможно динамически установить initialRoute https://reactnavigation.org/docs/en/limitations.html#dynamic -routes

По крайней мере, до react-navigation@4.x ни в одном навигаторе React Navigation нет никакого способа, поэтому для достижения этого можно динамически создать сам навигатор на основе ваших данных, если вы хотите придерживаться той же версии React Navigation или предпочитаете обновить библиотеку навигации до React Navigation 5, чтобы преодолеть это ограничение. Ссылка ссылка , упомянутая выше для ограничения, цитируемого в официальном документе React Navigation c, также содержит гиперссылку для нового API, преодолевающего это ограничение.

Надеюсь, это поможет. Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...