React Navigation:利用与Redux的深层链接

问题描述 投票:7回答:2

在React Navigation中,可以通过将uriPrefix prop传递给顶级导航器,或者将{containerOptions: {URIPrefix: PREFIX}}作为第二个参数传递给内置导航器(例如StackNavigator)来利用深度链接。

当Redux与React Navigation集成时,顶级导航器将通过navigation道具。

但是,在RN应用程序上同时启用Redux和深度链接时。 uriPrefixnavigation prop都需要传递给顶级导航器,这会引发错误,

这个导航器有导航和容器道具,因此不清楚它是否应该拥有自己的状态。

const S1 = () => <View><Text>S1 text</Text></View>;
const S2 = () => <View><Text>S2 text</Text></View>;
const S3 = () => <View><Text>S3 text</Text></View>;

const AppNav = StackNavigator(
  {
    S1: {screen: S1, path: 's1'},
    S2: {screen: S2, path: 's2'},
    S3: {screen: S3, path: 's3'}
  }
);

@connect(state => ({nav: state.nav}))
class App extends Component {
  render() {
    const
      { dispatch, nav } = this.props,
      uriPrefix = Platform.OS == 'android' ? 'http://localhost/' : 'http://';

    return (
      <AppNav
        navigation={addNavigationHelpers({dispatch: this.props.dispatch, state: this.props.nav})}
        uriPrefix={uriPrefix}
      />
    );
  }
}

const navReducer = (state, action) => (AppNav.router.getStateForAction(action, state) || state);
const rootReducer = combineReducers({nav: navReducer});

const RootApp = props =>
  <Provider store={createStore(rootReducer)}>
    <App />
  </Provider>;

export default RootApp;

如何将Redux和深层链接(使用React Navigation)集成到RN应用程序中?

react-native redux integration deep-linking react-navigation
2个回答
2
投票

请参阅@kristfal对Redux can not be used with deep linking #1189.的评论

或@grabbou comment.


0
投票

我会利用redux商店。考虑想深入链接到名为“Some Title”的书

  • 将基本查询字符串参数传递给您的应用启动器,例如“?route = Store / books / some-title”
  • 加载应用程序时,使用查询字符串中的信息更新您的状态。如果你想得到想象,你可以使用react路由器完成大部分工作。

只要您的redux操作/缩减器设置正确,您的应用程序就应该加载带有“Some Title”一书的商店页面(再次,这是一个理论示例)

© www.soinside.com 2019 - 2024. All rights reserved.