reactjs - 在渲染中重置 React 嵌套的导航器
问题描述
上下文:构建一个 React Native 移动应用程序。UI 底部有四个选项卡。三个包含 simple StackNavigator
s 以保留该选项卡内的导航状态。第四个屏幕本身就是一个标签导航器。每个screen
子选项卡的 是在StackNavigator
选项卡内保留自己的导航历史记录。
大纲:
顶级导航器:
BottomTabNavigator
|_Tab 1 (StackNavigator) (initial route)
|_Tab 2 (StackNavigator)
|_Tab 3 (StackNavigator)
|_Tab 4 (Tab4Container)
子导航器:
Tab4Navigator (MaterialTopTabNavigator)
|_Subtab 1 (StackNavigator) (initial route)
|_Screen 4.1.1 (initial route)
|_Screen 4.1.2
|_Subtab 2 (StackNavigator) (initial route)
|_Screen 4.2.1 (initial route)
|_Screen 4.2.2
选项卡 4 在选项卡本身上方有一些组件,因此它们被包装在一个容器中。本质上:
class Tab4Container extends React.router {
render() {
return(
<View>
<Header />
<Tab4Navigator navigation={this.props.navigation}>
</View>
)
}
}
问题:当用户离开 Tab4 并返回时,嵌套选项卡导航器不会重置其状态。首先,用户点击 Tab4,然后是 Subtab 2,然后是 Screen 4.2.2。然后用户点击Tab 2。然后用户返回Tab 4。当前屏幕应该是4.1.1,但它仍然是4.2.2。
Tab4Navigator 的结构是:
const Tab4Navigator = createMaterialTopTabNavigator(
{
subTab1: createStackNavigator(
{
screen_4_1_1: {
screen: Screen411Container
},
screen_4_1_2: {
screen: Screen412Container
},
},
{ initialRouteName: "screen_4_2_1" }
),
subTab2: createStackNavigator(
{
screen_4_2_1: {
screen: Screen421Container
},
screen_4_2_2: {
screen: Screen422Container
},
},
{ initialRouteName: "screen_4_2_1" }
),
},
{ initialRouteName: "subTab1" }
)
问题:重新渲染 Tab4Navigator 时,如何重置 StackNavigator?
解决方案
您必须在 Tab4Navigator 上添加 tabBarOnPress 事件,然后重置stack 。也检查这个GitHub链接
import { StackActions, NavigationActions } from 'react-navigation';
......
{ initialRouteName: "subTab1", tabBarOnPress: this.handleTabPress }
handleTabPress = ({ navigation }) => {
navigation.popToTop();
navigation.navigate(navigation.state.routeName);
}
推荐阅读
- django - Django Statics 无法访问(数字海洋)
- database - 将数据库结果存储在本地存储中以增加加载时间?
- python - Python中正则表达式的每个位置的子字符串
- sql - 如何将日期转换为正确的格式并从中获得最大、最小范围?
- integration - Thingsboard中动态创建设备的访问令牌有什么用?
- android - 根据我的课程选择获取学院列表
- javascript - jsreport - Openlayers 未加载
- c# - 更新向导没有显示我在 db 中添加的列
- postgresql - PostgreSQL 11 中的逻辑复制和声明式分区
- python-3.x - pandas_profiling.ProfileReport 错误:ValueError:无法将浮点 NaN 转换为整数