reactjs - React 中受保护的路由
问题描述
我正在尝试使用 Create React App 2 和 React Router 4 在 React 中创建一些受保护的路由。我以 Tyler McGinnis 的Protected Routes文章为例。这是我的基本应用程序组件。
class App extends Component {
constructor(props) {
super(props);
this.state = { loggedIn: false };
}
componentDidMount() {
console.log('did mount');
this.setState({ loggedIn: true });
}
render() {
fakeAuth.authenticate(this.state.loggedIn);
console.log('render');
return (
<Router>
<Fragment>
<Login />
<PrivateRoute path="/register" component={Register} />
<Chordsheets />
<Chordsheet />
</Fragment>
</Router>
);
}
}
export default App;
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route
{...rest}
render={props => (
fakeAuth.isAuthenticated === true
? <Component {...props} />
: <Redirect to="/" />
)}
/>
);
const fakeAuth = {
isAuthenticated: false,
authenticate(state) {
this.isAuthenticated = state;
console.log('isAuthenticated', this.isAuthenticated);
}
};
const Login = () => (
<div>
<Route exact path="/" component={LoginForm} />
</div>
);
const Chordsheets = () => (
<Fragment>
<Route path="/chordsheets" component={Header} />
<Route path="/chordsheets" component={AllChordSheets} />
</Fragment>
);
const Chordsheet = () => (
<Fragment>
<Route path="/chordsheet/:id" component={Header} />
<Route path="/chordsheet/:id" component={ChordSheet} />
</Fragment>
);
const Header = () => {
return (
<header>
<nav className="links">
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/chordsheets/0">My Chordsheets</Link>
</li>
</ul>
</nav>
</header>
);
};
组件安装后loggedIn
设置为true。去新路线时不会再次调用渲染,所以我无法到达Register
路线。
有人对如何构建它有任何想法吗?谢谢!
解决方案
我知道我迟到了,但我很乐意通过查看这个protected-react-routes-generator来帮助任何他想要这个功能的人
您要做的就是将路线作为数组提供。
推荐阅读
- flutter - 如何在 Flutter 中打开一次 ObjectBox 并跨多个页面访问
- wordpress - 为什么服务器在 WordPress 网站上找不到请求的页面?
- apache-beam - Apache Beam KDA 应用程序未创建检查点
- cryptocurrency - 错误:不变量失败:使用 uniswap v3 sdk (javascript) 创建池对象时出现 ZERO_NET
- python - 黑色格式化程序:如何在函数之前和之后放置一个换行符而不是两个
- java - 如何优化 Java 中的集成测试执行时间?
- node.js - 猫鼬获得余额为负的所有价值
- vue.js - vuejs中无法加载model.json、model_meta.json和model.weights.bin
- c# - ValidationAttribute.FormatErrorMessage 抛出 Input string was not in a correct format 错误
- javascript - Sonarqube 代码注入 (RCE) 错误,用于在 javascript 中为 eval() 方法动态执行代码