react-native - 如何重置抽屉导航器打开的屏幕状态?
问题描述
我有一个路由配置,首先打开一个登录屏幕,用户登录后,他被重定向到主屏幕,配置如下。
import { createStackNavigator } from '@react-navigation/stack';
const navigation = useNavigation();
export function AppRoutes() {
return (
<Navigator>
<Screen name="Login" component={Login}/>
<Screen name="HomeRoutes" component={HomeRoutes}/>
</Navigator>
);
}
使用抽屉导航器实现了登录后重定向用户的导航。
import { createDrawerNavigator } from '@react-navigation/drawer';
const { Navigator, Screen } = createDrawerNavigator();
export default function HomeRoutes() {
return (
<Navigator>
<Screen name="Home" component={Home}/>
<Screen name="InfoUser" component={InfoUser}/>
</Navigator >
);
}
当用户在“主页”屏幕并且他第一次导航到“InfoUser”屏幕时,执行 useEffect 从服务器请求数据。但是,如果用户返回主屏幕,然后导航回“InfoUser”屏幕,则不会再次执行此 useEffect,屏幕保持与用户第一次导航到该屏幕时离开时相同的状态。我需要每次他进入这个屏幕时,执行这个 useEffect 请求。对于导航,我正在使用navigation.navigate('InfoUser')
. 我应该做些什么不同的事情来获得这种行为?
解决方案
使用useFocus
代替 useEffect。
推荐阅读
- javascript - 有没有办法在 Angular 7 中使用引导程序来实现多级响应式下拉顶部导航栏?
- embedded - 为什么不能从用户空间访问/更改 GPIO?
- typescript - 如何在 VueJS 3.0 中使用 defineComponent 注册本地组件
- excel - 带有 selection.rows.count 的 vba 数字错误
- reactjs - 尝试从 s3 删除图像时出现 403(禁止)
- mysql - 寻求正确的MySql“IF”方法指南
- javascript - 获取 URL 字符串的特定部分
- kdb - 并行执行:阻塞接收、延迟同步
- apache-flink - Flink (1.11.2) - 尽管设置了正确的插件,但找不到 S3 的实现。使用 JDK11 和 Scala 2.12.11
- python - 在中间件上下文中获取 starlette 请求正文