当前位置: 首页 > 知识库问答 >
问题:

响应JS交换机路由器仅管理页面不打我的404页面

何雅惠
2023-03-14

我想限制我的应用程序的部分仅登录用户。我有这个工作使用下面的代码。

然而,以前我使用交换机路由器将用户发送到404页面时,没有找到匹配的路由。

由于某种原因,由于我将EnsureLoggedIn组件添加到App.jsx,用户永远不会重定向到404页面。

测试:在URL中输入随机路径。应该路由到404页面。

  • isLoggedIn=false:用户被引导到 /login页面。
  • isLoggedIn=true:找不到匹配的路由,页面容器呈现为空。

我希望交换机路由器忽略嵌套在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" /> );
     }
   }
 }

共有2个答案

司寇阳曦
2023-03-14

只是为了提供我最终使用的另一种方法。

这涉及到创建一个名为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>
左丘嘉言
2023-03-14

考虑使用<代码>

编辑:

大致的东西:

<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