使用多个路径进行反应导航深度链接

时间:2018-03-09 12:43:33

标签: reactjs react-native react-navigation

有没有办法配置react-navigation以便单个屏幕可以处理多个链接?

StackNavigator中的每个屏幕都有一个可选的属性path,可启用深层链接,StackNavigator也接受paths选项,可让您覆盖每个特定屏幕的路径,但它&# 39; s仍然是一对一的映射。 有没有办法声明应该由单个屏幕处理的无限数量的路径?

1 个答案:

答案 0 :(得分:5)

您可以将变量用于无限路径数量,如StackNavigator docs

中所示

来自文档的示例

StackNavigator({
  // For each screen that you can navigate to, create a new entry like this:
  Profile: {
    // `ProfileScreen` is a React component that will be the main content of the screen.
    screen: ProfileScreen,
    // When `ProfileScreen` is loaded by the StackNavigator, it will be given a `navigation` prop.

    // Optional: When deep linking or using react-navigation in a web app, this path is used:
    path: 'people/:name',
    // The action and route params are extracted from the path.

    // Optional: Override the `navigationOptions` for the screen
    navigationOptions: ({ navigation }) => ({
      title: `${navigation.state.params.name}'s Profile'`,
    }),
  },

  ...MyOtherRoutes,
});

<强>更新

您可以创建自定义路由处理程序,以便更详细地控制显示here的路径。

来自文档的示例

import { NavigationActions } from 'react-navigation'

const MyApp = StackNavigator({
  Home: { screen: HomeScreen },
  Profile: { screen: ProfileScreen },
}, {
  initialRouteName: 'Home',
})
const previousGetActionForPathAndParams = MyApp.router.getActionForPathAndParams;

Object.assign(MyApp.router, {
  getActionForPathAndParams(path, params) {
    if (
      path === 'my/custom/path' &&
      params.magic === 'yes'
    ) {
      // returns a profile navigate action for /my/custom/path?magic=yes
      return NavigationActions.navigate({
        routeName: 'Profile',
        action: NavigationActions.navigate({
          // This child action will get passed to the child router
          // ProfileScreen.router.getStateForAction to get the child
          // navigation state.
          routeName: 'Friends',
        }),
      });
    }
    return previousGetActionForPathAndParams(path, params);
  },
});