React Navigation从深层链接获取参数无法正常工作

时间:2019-04-24 10:50:50

标签: ios react-native react-navigation deep-linking

我已将路由器配置为:

const SwitchRouter = createSwitchNavigator(
  {
    Splash: {
      screen: Launch,
      path: 'hello/:code',
    },
    App: HomeStack,
  },
  {
    initialRouteName: 'Splash',
  }
);

我正在使用Safari中的链接,该链接启动了我的iOS应用,然后我应该从代码中的此链接获取参数。

我对链接尝试了不同,但无法从链接中获取任何参数。这是我尝试过的:

  • myApp://hello/123
  • myApp://hello/?code=123
  • myApp://hello?code=123

应该在以下“启动”屏幕中找到应该获得此code结盟者的代码:

const code = navigation.getParam('code', 'error');

代码值始终是错误,在这里我的参数从未找到。 我在这里想念什么吗?我遍历了所有GitHub和react-navigation的文档,但找不到适合我的解决方案。

我读到有些人在componentDidMount中获取深层链接参数时遇到一些问题。显然它们不可用。 因此,我这里负责获取参数“代码”的代码试图在componentDidMount / DidUpdate中甚至在渲染器中使用,但在所有情况下我都无法获取参数。

1 个答案:

答案 0 :(得分:1)

我认为您不能将Deeplink参数传递给第一个/初始屏幕。 您必须改为使用代理服务器:

const SwitchRouter = createSwitchNavigator(
{
    CodeScreen: {
       Screen: Code,
       path: 'code/:code',
    }
    Splash: {
       screen: Launch,
       path: 'hello',
    },
    App: HomeStack,
   },
   {
     initialRouteName: 'Splash',
   }
});



class Code extends Component {

constructor(props) {
    super(props);

    const {navigation} = this.props;
    const code = navigation.getParam('code', false);

    navigation.navigate('hello', {code});

}

render() {
    return (
        <View>

        </View>
    );
}

}

现在,您可以在SplashScreen中检索“代码”参数。