reactjs - 如何访问组件外部的状态
问题描述
我有一个应用程序组件,我试图像这样制作一个 PrivateRoute:
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route
{...rest}
render={props =>
this.state.auth === true ? <Component {...props} /> : <Redirect to="/" />
}
/>
);
问题是 this.state.auth 在 App 组件内,而 Route 在组件外,所以我无权访问它,如何从状态中获取布尔值?
PS。你不明白这个问题:这是我要澄清的代码:
import React, { Component } from 'react';
import {
BrowserRouter as Router,
Route,
Link,
Redirect,
Switch
} from 'react-router-dom';
import './App.scss';
import ChangePass from './components/ChangePass';
import MManager from './components/MManager';
import Mworker from './components/Mworker';
import Mclient from './components/Mclient';
import Login from './components/Login';
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route
{...rest}
render={props =>
this.state.auth === true ? <Component {...props} /> : <Redirect to="/" />
}
/>
);
class App extends Component {
state = {
id: '',
password: '',
role: '',
token: '',
firstName: '',
lastName: '',
auth: false,
error: false
};
如您所见,状态在 App 组件内部,我想在 PrivateRoute 中访问它,我该怎么做?
解决方案
为了在子组件中使用父状态,它应该作为道具传递:
<PrivateRoute auth={this.state.auth} component={...} />
如果组件嵌套很深,这可能是个问题。
或者,应该使用全局状态解决方案(上下文 API、Redux 等)来访问嵌套组件中的全局应用程序状态。
推荐阅读
- android - 当我尝试从 firebase 检索图像时出现错误提示“你声明了这个活动”
- php - laravel 项目中的作曲家冲突
- java - 如何在回收站视图中过滤数据
- php - 使用 PHP 来“解析”带有响应头“content-type: image/jpeg”的图像
- android - 如何将数组放入复选框并根据数组 id react native 点击它?
- c# - 是否可以在 SonarQube 中添加单元测试项目的覆盖率报告和代码分析?如果是这样,我应该如何在 SonarQube 中配置它们?
- android - IllegalArgumentException:指定为非空的参数为空:方法 kotlinx.coroutines.BuildersKt__Builders_commonKt.launch,参数上下文
- autohotkey - 时间到时自动热键重启脚本
- python - 如何解决错误“int32 类型的对象不是 JSON 可序列化的”
- javascript - React Native 得到 TypeError: undefined is not an object(evalating '_this.state.apiData.items.map')