首页 > 其他分享 >react native 退出登录后清空路由栈并返回登录页

react native 退出登录后清空路由栈并返回登录页

时间:2023-10-19 15:44:20浏览次数:32  
标签:... 登录 react expo router login navigation 路由 native

背景:

由于项目使用的expo-router,一开始时在退出登录是如下实现的:

import { router } from "expo-router";

...
router.replace("/my/login/login");
...

使用expo-router的router.replace方法跳转至登录页。

结果发现虽然跳转成功,但是点击手机返回操作时,虽然上一个页面没有了,还能返回上上个页面。在web开发时,使用router.replace之后浏览器是不能返回之前页面的,但是这里的replace只会删掉上一个路由,之前的还在路由栈中。

解决:

reactnavigation文档
解决方法如下:

import { useNavigation, CommonActions } from "@react-navigation/native";

...
const navigation = useNavigation();
navigation.dispatch(
  CommonActions.reset({
    index: 0,
    routes: [{ name: "my/login/login" }],
  })
);
...

过程记录:

  1. 首先尝试了router.reset()方法,发现expo-router没有这个方法;
  2. 然后查阅react navigation文档找到reset方法,按如下使用:
navigation.dispatch(
  CommonActions.reset({
    index: 0,
    routes: [{ name: "/my/login/login" }],
  })
);

与正确代码只差了一个 / ,因为expo-router中路由地址是 "/my/login/login" 。

然后控制台报警告
image
3. 打印出全部的路由后发现路由路径不对,修改路径后问题解决。

import { useNavigationState } from '@react-navigation/native';

...
const navigationState = useNavigationState((state) => state);
// 获取所有路由信息
const allRoutes = navigationState.routes;
// 输出所有路由信息
console.log(allRoutes);
...

标签:...,登录,react,expo,router,login,navigation,路由,native
From: https://www.cnblogs.com/lpkshuai/p/17774858.html

相关文章

  • react项目中预览pdf文件
    最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js//安装"pdfjs-dist":"2.0.402"//引入import*aspdfjsfrom'pdfjs-dist'import*aspdfjsWorkerfrom'pdfjs-dist/build/pdf.worker.entry'//定义初始值letpdfDoc=null;......
  • Ant Design中表单验证输入框默认值initialValue不更改值会验证不通过(react)
    AntDesign中表单验证输入框默认值initialValue不更改值会验证不通过(react)更改前<Form.Itemlabel="用户标识"name="id"rules={[{required:true,message:'用户标识不能为空!',},]}......
  • React学习笔记08- 组件的样式
    1.使用行内样式想给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现://注意这里的两个括号,第一个表示我们在要JSX里插入JS了,第二个是对象的括号<pstyle={{color:'red',fontSize:'14px'}}>Helloworld</p>行内样式需要写入一个样式对象,而这个样式对象的位置可......
  • React学习笔记06-函数式组件
    函数式组件即在React中通过函数的方式来声明一个组件importReactfrom"react"functionApp(){return(<div>函数式组件<div>hhh</div></div>)}/*16.8之前//无状态16.8之后reacthooks*/exportdef......
  • React学习笔记07-组件嵌套
    一个项目肯定是由多个组件构成的,组件之前必然会存在相互嵌套的关系在react中如果想要将一个组件嵌入到另外一个组件中只需要在父组件的render函数的返回值中放入子组件即可请看下面代码importReact,{Component}from"react"classNavbarextendsComponent{rende......
  • Linux-shell脚本使用ssh远程执行命令通过密码的方式登录
    1. sshpass简介sshpass是一个在非交互式ssh会话中自动输入密码的工具。它可以直接在命令行中指定密码,因此可以用于Shell脚本等自动化场景。在RedHat系统中,可以通过epel-release源安装sshpass。epel-release源是ExtraPackagesforEnterpriseLinux(EPEL)的缩写......
  • React学习笔记05-类组件
    ES6的加入让JavaScript直接支持使用class来定义一个类,react创建组件的方式就是使用的类的继承,ES6class是目前官方推荐的使用方式,它使用了ES6标准语法来构建,看以下代码importReactfrom'react'importReactDOMfrom'react-dom'classAppextendsReact.Component{rend......
  • 【Vue3响应式入门#01】Reactivity
    专栏分享:vue2源码专栏,vue3源码专栏,vuerouter源码专栏,玩具项目专栏,硬核......
  • Redis实现登录(基于session)
    Redis实现登录(基于session)拦截器:实现多模块用户登录的校验代码:创建拦截器publicclassLoginInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsExcept......
  • GraalVM进行spring boot的native编译报错 “returned non-zero result”解决方法
    使用GraalVM对springboot工程进行native编译:系统:CentosJDK:GraalVMJDK21报错:Ifyouareunabletoresolvethisproblem,pleasefileanissuewiththeerrorreportat:https://graalvm.org/support[INFO]---------------------------------------------------------......