Есть ли способ перейти к экрану по умолчанию (Профиль), если имя пути не соответствует маршруту, который я определяю явно? - PullRequest
0 голосов
/ 08 мая 2020

Я попытался написать объект конфигурации для моего собственного приложения для реакции в соответствии с документами по настройке ссылок .

Я определил ряд сопоставлений пути -> маршрутов, включая Chat: 'feed' и Explore: 'news'

Моя цель - чтобы приложение по умолчанию отображало экран профиля при разрешении https://example.com/someusername и передайте 'someusername' в качестве параметра id. Подобно тому, как https://instagram.com/apple отображается непосредственно на экран профиля для учетной записи @apple.

const linking = {
  prefixes: ['https://example.com', 'example://'],
  config: {
    Home: {
      path: '',
      screens: {
        Chat: 'feed',
        Explore: 'news',
        Profile: ':id',
      },
    },
  },
}

Я не позволю пользователям создавать аккаунты @feed, @news, et c. чтобы избежать конфликта. Я также показываю сообщение «пользователь не найден», если «someusername» еще не существует.

Есть ли правильный способ сделать этот объект конфигурации? Или, если мне нужно написать собственные функции getStateFromPath / getPathFromState, есть ли у кого-нибудь пример?

1 Ответ

0 голосов
/ 10 мая 2020

У нас нет встроенного способа сделать это прямо сейчас, но вы можете предоставить пользовательскую getStateFromPath функцию для возврата другого объекта состояния:

const linking = {
  prefixes: ['https://mychat.com', 'mychat://'],
  config: {
    Chat: 'feed/:sort',
  },
  getStateFromPath(path, config) {
    // You can perform own checks on the path
    if (isValidPath(path)) {
      return {
        routes: [
          {
            name: 'Home',
            state: {
              routes: [{ name: 'Profile' }],
            },
          },
        ],
      };
    }

    return getStateFromPath(path, config);
  },
};

https://reactnavigation.org/docs/use-linking#getstatefrompath

Что касается сообщения о том, что пользователь не найден, я бы рекомендовал обработать его на самом экране Profile, проверив параметры и отобразив там сообщение об ошибке.

...