在React Navigation中,可以通过将uriPrefix
prop传递给顶级导航器,或者将{containerOptions: {URIPrefix: PREFIX}}
作为第二个参数传递给内置导航器(例如StackNavigator
)来利用深度链接。
当Redux与React Navigation集成时,顶级导航器将通过navigation
道具。
但是,在RN应用程序上同时启用Redux和深度链接时。 uriPrefix
和navigation
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应用程序中?
请参阅@kristfal对Redux can not be used with deep linking #1189.的评论
或@grabbou comment.
我会利用redux商店。考虑想深入链接到名为“Some Title”的书
只要您的redux操作/缩减器设置正确,您的应用程序就应该加载带有“Some Title”一书的商店页面(再次,这是一个理论示例)