使用 React Router 导航到路径时,组件状态值会重置为默认值

2024-01-04

我正在使用 React-Routerv4 ,当我使用登录表单登录时,我设置了应用程序组件状态值isUser使用函数从子组件登录变为 truesetUserLogin,我可以在登录后在控制台中正确调试。我还指定了,如果我迁移到/login路径,它检查isUser要迁移到的状态值/home page如果用户已经登录(isUser is true)。但该值现在自动更改为默认值false,当我进入/login在浏览器中,它显示登录页面而不是主页。我是 React 新手,所以我在这里遗漏了一些东西吗? 这是代码片段:

import React from 'react';
import ReactDom from 'react-dom';
import 'materialize-css/bin/materialize.css'
import 'materialize-css/bin/materialize.js';
import {BrowserRouter as Router, Route , Redirect} from 'react-router-dom';
import {LoginForm} from './components/login';
import {Home} from './components/home';
import {Main} from './components/main';
import {Room} from './components/room';
import "materialize-css";
import 'materialize-css/js/toasts';


class App extends React.Component {
    constructor(props){
        super(props);
        this.state={
            isUser : false
        }
        this.setUserLogin = this.setUserLogin.bind(this);
    }
    setUserLogin(){
        this.setState({isUser:true});
    }
    render() {
        return <Router>
            <div>
                <Route exact path="/" component={Home}/>
                <Route path="/login" render={(props)=>(
                    this.state.isUser ? <Redirect to="/home" /> : <LoginForm history={props.history} setUserLogin = {this.setUserLogin}/>
                )} />
                <Route path="/home" component={Main}/>
                <Route path="/room" component={Room}/>
            </div>
        </Router>
    };
}
ReactDom.render(<App/>, document.getElementById('app'));

如果我了解您的情况,当您在浏览器中手动更改 URL 时,您是否希望您的状态持续存在?如果你想要这个,你必须在持久存储(如 localStorage)中存储一些变量,并在组件生命周期的某个时刻检查它:构造函数、componentDidMount...

当您手动更改浏览器位置时,一切都会重新启动,包括状态,整个页面都会重新下载(或从缓存中读取)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 React Router 导航到路径时,组件状态值会重置为默认值 的相关文章

随机推荐

  • 安装 geopandas 的问题

    我正在尝试在我的笔记本电脑 Windows 10 版本 1709 机器 上安装 geopandas 执行 pip install geopandas 命令后 我收到以下消息 command python setup py egg info
  • 为什么jsp改变时tomcat不需要重启

    我一直在使用JSP Servlet很长一段时间 我知道每当我们改变任何东西Servlet我们需要重新启动 Tomcat 服务器才能获取更改 如果 JSP 发生更改 tomcat 不需要重新启动 据我所知JSP页面被转换成Servlet仅当编
  • 如何检测浏览器中的链接复制情况?

    昨天我和一个出租车司机聊天 当他提到我是一名程序员时 他告诉我 几天前他经历了以下情况 在尝试从浏览器地址栏中复制 URL 时 出现一个消息框带有类似的消息 请不要复制此链接 而是注册 我不是网络开发人员 所以这可能是一个蹩脚的问题 但我想
  • Jenkins 插件中的变量替换

    我正在开发一个新的 Jenkins 插件 该插件将在 Jenkins 作业的构建阶段执行 并且要求允许用户在插件的作业配置中指定变量名称 而不是文字值 目的是 当作业执行时 用户指定的变量名称将被替换为与该变量关联的实际值 并且插件将在运行
  • ASP.NET MVC - 动态样式表

    我想让用户选择网站的背景颜色并将所选颜色保存在数据库中 当用户登录时 后台将显示正确的颜色 基于以下website http www codeproject com KB aspnet CSSVariables aspx 我可以在范围内设置
  • 如何有条件地为张量赋值[屏蔽损失函数]?

    我想创建一个 L2 损失函数 忽略标签值为 0 的值 gt 像素 张量batch 1 包含标签 同时output是净输出的张量 两者的形状均为 None 300 300 1 labels mask tf identity batch 1 l
  • laravel phpexcel 更新中不明确的类解析

    我尝试使用 php excel 更新 laravel 同时安装我在作曲家中发现了以下警告 Error Warning Ambiguous class resolution SettingsController was found in bo
  • 可移植地处理 C++ 中的异常错误

    我正在致力于将 Visual C 应用程序移植到 GCC 应该在 MingW 和 Linux 上构建 现有代码使用 try except 1 在几个地方阻塞 这样几乎没有什么 除了内存不足类型错误 会让程序退出而不做一些最小的日志记录 使用
  • Git merge - 三路“git merge”

    I am trying to simulate the example on three way merge process in git given here https git scm com book en v2 Git Branch
  • Psr7 Http Message,为什么不可变?

    我正在看PSR 7 https github com php fig http message tree master src接口并思考如何实现它们 我也一直在读这篇博文 http evertpot com psr 7 issues 显然
  • Vue.js:v-for完成后的事件

    我正在尝试使用 Vue js 构建一个简单的聊天应用程序 我的问题是 当写入新消息时 消息区域需要滚动到底部 我使用 v for 指令循环遍历消息 v for 更新 DOM 时是否有事件 我已经做到了 以便消息区域 div 监听组件的消息数
  • 时间序列作为 data.table 中的“ts”列?

    我有多组时间序列数据 希望帮助找出将它们放入 R 并使用 R 进行分析的最佳方法 我对 data table 非常熟悉 但对 R 不太熟悉ts支持时间序列分析的类 我特别想知道如何使用ts http stat ethz ch R manua
  • Selenium - 如何在 iframe 上定位元素

    我正在尝试在 iframe 中查找元素 但我无能为力 这是我的代码和我收到的错误 这是我的脚本 public class Add Lists public static void main String args throws Interr
  • 在android中滚动listView时重新加载图像

    我正在尝试编写一个新闻列表应用程序 我已经解析了来自服务器的 JSON 数据并创建了 CustomListAdapter 我的listView中有三个textView和imageView 它工作得很好 图像已加载 我将其设置为 imageV
  • 使用 OnItemClickListener 从 ListView 和数据库中删除项目

    我创建了一个数据库并设法将添加的项目显示到 ListView 中 现在我需要一种方法来从 ListView 和数据库中删除项目 public class ZeigeFaecherListe extends AppCompatActivity
  • 从详细 JSON 升级到 JSON 轻量级会对只查看数据而不查看元数据的人产生什么影响?

    谁能用简单的英语简洁地向我解释一下 WCF 数据服务的详细 JSON 和 JSON light 之间的主要区别是什么 我找到了微软的一份名为 JSON light at aglance 的文档 不过有23页那么长 我不关心元数据 我只关心数
  • 批处理文件打开窗口并调整其大小

    我目前正在尝试通过批处理文件打开两个窗口 然后调整它们的大小并移动它们 分屏 打开单独的窗口很容易 echo off cd C Program Files x86 Internet Explorer start iexplore exe c
  • 将八位字节字符串转换为 Unicode 字符串,Python 3

    我正在尝试使用 Python 3 将带有八进制转义 Unicode 的字符串转换回正确的 Unicode 字符串 如下所示 training 345 256 214 346 210 220 345 276 214 txt 是读入的字符串 t
  • 给定范围内的最近邻居

    我面临的问题是快速找到给定范围内最近的邻居 数据集示例 id string float 0 AA 0 1 12 BB 0 5 2 CC 0 3 102 AA 1 1 33 AA 2 8 17 AA 0 5 对于每一行 打印满足以下条件的行数
  • 使用 React Router 导航到路径时,组件状态值会重置为默认值

    我正在使用 React Routerv4 当我使用登录表单登录时 我设置了应用程序组件状态值isUser使用函数从子组件登录变为 truesetUserLogin 我可以在登录后在控制台中正确调试 我还指定了 如果我迁移到 login路径