Javascript 反应全球对象&;事件

Javascript 反应全球对象&;事件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我是一个新的反应者,当涉及到全球事件和范围时,我仍然有一些“在反应中思考”的问题 我的目标是维护有关“会话”的一些全局数据,例如用户是否登录以及他们的身份 我的主容器如下所示: import React, { Component } from "react"; import { Link, Route, Switch } from 'react-router-dom'; import Header from './Header'; import Routes from "./Routes";

我是一个新的反应者,当涉及到全球事件和范围时,我仍然有一些“在反应中思考”的问题

我的目标是维护有关“会话”的一些全局数据,例如用户是否登录以及他们的身份

我的主容器如下所示:

import React, { Component } from "react";
import { Link, Route, Switch } from 'react-router-dom';

import Header from './Header';
import Routes from "./Routes";

class App extends Component {
    render() {
        return (
            <div className="parent-container">
                <Header />
                <Content />
            </div>
        )
    }
}

class Content extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <div className="content" >
                <Routes />
            </div>
        )
    }
}

export default App;
每个路由加载一个“表示”视图组件,该组件包含该特定视图的子组件(登录视图组件导入LoginForm组件等)

每当我的应用程序被硬加载(或重新加载)时,我希望触发以下逻辑(伪代码):

我想我可以在
应用程序
组件上的
组件willmount()
函数中执行类似操作

//...
class App extends Component {
    componentWillMount(){
        if(token && valid(token)){
            // store the user session in an object containing token, user-role, etc.
        }
    }

    render() {
//....
……但这似乎是个糟糕的设计

另一部分是:

  • 根据用户是否登录显示/隐藏导航栏链接(如果未登录,则显示“登录”链接,如果已登录,则显示“注销”链接)
  • 在呈现视图之前,检查状态更改时的身份验证 以上两个问题是我想讨论的背景,但我只想把注意力集中在主要问题上


    “反应方式”是如何做到的?

    不要使用componentWillMount,至少使用不安全的\u componentWillMount()它将在React 17中被删除检查这一点我不想使用,如果它在坏的或不安全的实践中使用身份验证,我想你应该使用React router auth,我也面临这样的困境。但这看起来不像是你希望每个组件单独处理的事情(尽管我可能错了)。我在考虑使用MobX或Redux来管理一些isLoggedIn状态的应用程序状态,这只有在登录请求成功时才是真的。这样,我的任何组件都可以订阅该状态,并基于该状态进行不同的渲染。@MattPengelly这也是我的想法,但是否有必要使用Redux之类的工具来建立一个状态,以便对“订阅”作出反应?难道不能简单地将一些数据存储在整个应用程序可用的全局范围内,而不必显式地将其传递给每个组件吗?
    if session_token exists:
        - make a call to API
        - verify session
        - store a global session object containing session data
    
    //...
    class App extends Component {
        componentWillMount(){
            if(token && valid(token)){
                // store the user session in an object containing token, user-role, etc.
            }
        }
    
        render() {
    //....