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() {
//....