react-native - 删除导航到不同堆栈的先前堆栈
问题描述
我有一个嵌套的堆栈布局。每个堆栈都有transparentCard: true
一个背景图像可以看到。下面的屏幕截图显示了mainStack
在背景中仍然可见,前景中的屏幕是嵌套在抽屉中的堆栈。如何在后台删除 mainStack?
这只发生在 iOS 上。旧堆栈未在 Android 上显示。
我可以使用隐藏它transitionConfig
吗?
当导航到不同堆栈中的路线时,前一个堆栈在下方可见。如何删除以前的堆栈?
const withHeader = (
screen: Function,
routeName: string,
Header
): StackNavigator =>
createStackNavigator(
{
[routeName]: {
screen,
navigationOptions: ({ routeName, props }) => ({
header: props => <Header {...props} />
})
}
},
{
transparentCard: true
}
);
const routes = {
VideoEpisodes: {
screen: withHeader(VideoEpisodesScreen, "Video Episodes", DrawerHeader)
},
...
About: {
screen: withHeader(AboutScreen, "About", DrawerHeader)
}
};
const NestedDrawer = createDrawerNavigator(routes, config);
const MainStack = createStackNavigator(
{
Home: {
screen: HomeScreen,
...
},
Drawer: {
screen: NestedDrawer,
...
},
VideoPlayer: {
screen: VideoPlayerScreen,
...
}
},
{
mode: "card",
transparentCard: true,
cardStyle: { backgroundColor: "transparent" },
tintColor: "#ffffff",
headerMode: "screen"
}
);
export default createAppContainer(MainStack);
应用程序.js:
class App extends React.Component {
componentDidMount() {
// do stuff while splash screen is shown
// After having done stuff (such as async tasks) hide the splash screen
SplashScreen.hide();
}
render() {
const { videos } = this.props;
return (
<ImageBackground
source={require("./assets/images/TC_background.jpg")}
style={styles.container}
>
<PersistGate loading={null} persistor={persistor}>
<AppNavigator
ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}}
/>
</PersistGate>
</ImageBackground>
);
}
}
在componentDidMount
新堆栈(HomeScreen)上,我已将重置以隐藏前一个堆栈(MainStack):
componentDidMount() {
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: "Home" })]
});
this.props.navigation.dispatch(resetAction);
}
但是,它只是将我导航回上一个堆栈(MainStack)的主屏幕。我只需要隐藏它。有任何想法吗?
我已经设置了嵌套StackNavigators
,所以我可以显示适当的标题。
解决方案
你在使用导航吗?还是推?无论哪种方式,如果您不需要堆叠,那么在返回时,您可以使用 this.props.navigation.replace 而不是 push/navigate。
它是这样使用的:
this.props.navigation.replace("SomeScreen", { someParams: someValue });
还有像@thecodrr所说的 StackActions 和 NavigationActions 。
推荐阅读
- python - 如何获取python函数内部定义的所有局部变量?
- java - 从 java 文件运行 java 文件
- django - Django 异常值:无效过滤器错误:
- python - 我想连接两个python arange,但我只获得第一个arange
- javascript - 理解 js 数组/对象
- python - 如何通过同一端口python为多个视频创建rtsp?
- google-kubernetes-engine - GKE 大使 http -> https 重定向、健康检查问题
- android - 如何在 Android 中将 Button 放置在 WebView 的顶部
- f# - 为什么在这里泛化具有显式类型注释的值?
- swift - Swift - 更新现有核心数据实体的最佳实践