【发布时间】:2017-10-12 20:11:50
【问题描述】:
我决定需要将常规的 react-nagivation 设置换成 redux 容器,主要是因为我需要跟踪登录状态等内容。
我不会说谎,因为这是我的第一个 react 导航,将它移到 redux 对我来说是一个非常混乱的事情,但是我一步一步地达到了我的基本结构正在工作的地步,嗯......几乎可以工作了。
我所拥有的是在一切之上的 StackNav,主屏幕是 TabNav。屏幕加载正常,切换到该* StackNav 的不同屏幕的应用程序部分工作正常。当我在该 TabNav 中从第一个选项卡切换到第二个选项卡时,会出现我的问题。 澄清一下,我有 2 个标签 - “主页”和“我的帐户”。 从家切换到我的帐户确实看起来正在切换选项卡,但组件没有正确呈现。它缺少渲染函数中的所有内容以及样式。然后,当我想切换回“主页”选项卡时,屏幕会滑动,就像我实际上会在* StackNav 之间切换,而不仅仅是在选项卡之间切换。最重要的是,现在回到“主页”选项卡后,我可以在左上角选择“返回”,使用时,它只是滑动到主页的“上一个”视图,即使它是同一个标签。
我在写这篇文章时很困惑,但希望有人能从中看出意义。这是我的代码:
*堆栈导航配置:
const routeConfiguration = {
Home: { screen: HomeTabsNavigation },
GameList: { screen: GameList },
OfferDetails: { screen: OfferDetails },
}
const stackNavOptions = {
initialRouteName: 'Home',
mode: 'card',
headerMode: 'float',
}
export const StackNavConfig = StackNavigator(routeConfiguration, stackNavOptions);
* Stack Nav 组件:
const mapStateToProps = (state) => {
return {
navigationState: state.stackNav,
}
}
class StackNavigation extends React.Component {
render() {
const { dispatch, navigationState } = this.props
return (
<StackNavConfig
navigation={
addNavigationHelpers({
dispatch,
state: navigationState,
})
}
/>
)
}
}
export default connect(mapStateToProps)(StackNavigation)
HomeTabs 定义为顶层 StackNav 的第一屏:
const HomeTabs = TabNavigator({
Home: { screen: HomeView },
MyAccount: { screen: MyAccountView },
}, {
tabBarOptions: tabBarOptions,
});
export default HomeTabs;
HomeTabs 组件:
const mapStateToProps = (state) => {
return {
navigationState: state.homeTabs,
}
}
class HomeTabsNavigation extends Component {
render() {
const { navigationState, dispatch } = this.props;
return (
<HomeTabs
navigation={
addNavigationHelpers({
dispatch,
state: navigationState,
})
}
/>
);
}
}
export default connect(mapStateToProps)(HomeTabsNavigation);
我的 Redux 商店:
const middleware = () => {
return applyMiddleware(createLogger());
}
export default createStore(
combineReducers({
stackNav: (state, action) => StackNavConfig.router.getStateForAction(action, state),
homeTabs: (state, action) => HomeTabs.router.getStateForAction(action, state),
}),
middleware(),
)
我的 TabNav 视图现在只是显示文本,所以我不会把它们放在这里,除非它很重要,然后我当然会更新代码。 帮助! ;)
【问题讨论】:
标签: reactjs react-native redux react-redux react-navigation