我想限制我的应用程序的部分仅登录用户。我有这个工作使用下面的代码。
然而,以前我使用交换机路由器将用户发送到404页面时,没有找到匹配的路由。
由于某种原因,由于我将EnsureLoggedIn组件添加到App.jsx,用户永远不会重定向到404页面。
测试:在URL中输入随机路径。应该路由到404页面。
我希望交换机路由器忽略嵌套在EnsureLoggedIn中的内容,因为所有路由都不匹配,然后渲染404。
希望有更多经验的人能指导我。
一个pp.jsx
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage}/>
<Route exact path="/someotherpage" component={SomeOtherPage}/>
<EnsureLoggedIn>
<Route exact path="/dashboard" component={Dashboard}/>
</EnsureLoggedIn>
<Route component={Error404Page}/>
</Switch>
<Footer/>
</BrowserRouter>
EnsureLoggedIn.jsx
class EnsureLoggedIn extends Component {
constructor(props) {
super(props);
this.state = {isLoggedIn: false};
}
render() {
const isLoggedIn = this.state.isLoggedIn;
if (isLoggedIn) {
return this.props.children
} else {
return ( <Redirect to="/login" /> );
}
}
}
只是为了提供我最终使用的另一种方法。
这涉及到创建一个名为UserArea的容器,该容器将所有仅管理页面列为子容器。
然后在render函数中,如果用户未登录,则以下命令确保以/user区域开头的任何url都将重定向到登录页面。
this.isLoggedIn() ? (<UserArea />) : (<Redirect to="/login" />) )
一个pp.jsx
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage}/>
<Route exact path="/someotherpage" component={SomeOtherPage}/>
<Route exact path="/login" component={LoginPage}/>
<Route path="/user-area" render={ ()=>(this.isLoggedIn() ? (<UserArea />) : (<Redirect to="/login" />) )} />
<Route component={Error404Page}/>
</Switch>
<Footer/>
</BrowserRouter>
UserArea.jsx
<BrowserRouter>
<main className="ks-main-content ks-container__user-area">
<UserAreaHeader />
<Switch>
<Route exact path="/user-area/dashboard" component={UserAreaDashboardPage}/>
<Route exact path="/user-area/profile" component={UserAreaProfile}/>
<Route component={Error404Page} />
</Switch>
</main>
</BrowserRouter>
考虑使用<代码>
编辑:
大致的东西:
<BrowserRouter>
<Header/>
<Switch>
<Route exact path="/" component={HomePage}/>
<Route exact path="/someotherpage" component={SomeOtherPage}/>
<Route exact path="/dashboard" component={LoggedInEnsuringDashboard}/>
<Route component={Error404Page}/>
</Switch>
<Footer/>
</BrowserRouter>
和
class LoggedInEnsuringDashboard extends Component {
constructor(props) {
super(props);
}
render() {
if (this.props.isLoggedIn) {
return <Dashboard>
} else {
return <Redirect to="/login" />
}
}
}
问题内容: 尝试执行以下操作,但不起作用。 正如文档所述,Switch元素内仅允许Route和Redirect元素。如何在不显式地将HomePage和UserPage包裹在App中或没有将错误页面包裹在App中的情况下使其工作? 问题答案: 当我开始开发“通用React应用”时,第一页的加载是通过服务器端渲染完成的,但是我也遇到了类似的问题,因为React- Router刚刚更新到4.0。您应该考
我读了这个文件关于反应路由器交换机 我理解交换机和路由的定义 但有些地方还是不能理解 如果我只想选择一条路径进行渲染,我们可以使用如下开关 我不明白的一点是,我可以在没有开关的情况下获得同样的效果 那么,我们为什么要使用交换机呢?我们什么时候需要使用开关? 我发现一个需要使用开关的情况 如果我想在没有路径匹配时呈现特定的组件 我们需要像这样包装路由开关 我说得对吗?
null null 我需要从用户的输入int从1到10,并产生一个从1到10的随机数,如果两者相等,并且用户点击猜测按钮,应该显示消息告诉他是对还是错,如果他是对的,页面背景颜色应该是绿色,否则如果是错的,应该是红色
问题内容: 我一直在尝试从php向asp发送xml消息,并使用CURL将响应输出到我的php页面,但是没有运气来接收任何响应。这是我尝试过的: 谁能指导我我做错了什么? 问题答案: 不要为简单的POST建立自定义请求。CURL非常有能力在没有所有那些恶作剧的情况下发布帖子:
现在访问一个不存在的地址,如:http://localhost:3000/haha 页面会显示: Cannot GET /haha 我们来自定义 404 页面。修改 routes/index.js,在: routes/index.js app.use('/comments', require('./comments')) 下添加如下代码: // 404 page app.use(function
现在访问一个不存在的地址,如:http://localhost:3000/haha 页面会显示: Cannot GET /haha 我们来自定义 404 页面。修改 routes/index.js,在: routes/index.js app.use('/posts', require('./posts')); 下添加如下代码: // 404 page app.use(function (re