react-native - 如何防止返回登录屏幕反应式
问题描述
以下是我的登录和索引文件,登录后如果按下返回键,它会返回登录。我是新来的本地人,请告知。我在过去的一周里被困住了。我正在使用博览会开发
登录.js
userLogin = () => {
if(this.state.email === '' && this.state.password === '') {
Alert.alert('Enter details to signin!')
} else {
this.setState({
isLoading: true,
})
firebase
.auth()
.signInWithEmailAndPassword(this.state.email, this.state.password)
.then((res) => {
console.log(res)
console.log('User logged-in successfully!')
this.setState({
isLoading: false,
email: '',
password: ''
})
this.props.navigation.navigate('Deqo')
})
.catch(error => this.setState({ errorMessage: error.message }))
}
}
这是导航路径。我直接从堆栈导航导航到底部标签导航。
索引.tsx
import { NavigationContainer, DefaultTheme, DarkTheme} from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import * as React from 'react';
import { ColorSchemeName } from 'react-native';
import BottomTabNavigator from './BottomTabNavigator';
import LinkingConfiguration from './LinkingConfiguration';
export default function Navigation({ colorScheme }: { colorScheme: ColorSchemeName }) {
return (
<NavigationContainer
linking={LinkingConfiguration}
theme={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
<MyStack/>
</NavigationContainer>
);
}
解决方案
您可以在直接登录后使用 navigation.reset()。.reset() 将清除所有导航历史记录。并将从您可以指定的索引开始一个新的。您还将指定要使用哪个屏幕堆栈启动新的堆栈导航历史记录。这是我的代码片段。 用户直接登录后。我清除历史。并从 mainLayout 开始。因此用户永远无法返回登录屏幕。就像他按下导航到该屏幕的按钮一样:
React.useEffect(() => {
if (user) {
navigation.navigate("MainLayout");
navigation.reset({
index: 0,
routes: [{ name: "MainLayout" }],
});
}
}, [user]);
推荐阅读
- html - 如何在 ASP.NET 中使用 chart.js 上的 sql 表数据中的多个数据集?
- c++ - 数据到达数据库时如何自动记录到达时间戳
- python - 如何将 YOLO 检测类名称保存在 csv 文件中
- python - 尝试在 CSV 中搜索列,然后在 Python 中返回与该列关联的行
- sql - 在 SQL 中获取用户的余额和用户的首次交易日期
- node.js - 未找到此依赖项:* ./node_modules/@shopify/shopify-api/dist/clients/http_client/http_client.js 中的 fs
- tensorflow2.0 - 为什么没有 CuDNN?
- reactjs - 如何向 Alice-Carousel 添加自定义箭头按钮?
- python - 解压缩问题和 ValueError:int() 以 10 为底的无效文字:'e'
- python - 从 tkinter GUI 将变量传递给外部模块