React Router 在 else 中加载任何一个组件

Posted

技术标签:

【中文标题】React Router 在 else 中加载任何一个组件【英文标题】:React Router Load Any of One Component in else 【发布时间】:2021-05-15 12:19:23 【问题描述】:

我创建了一个带有受保护路由的反应应用程序。现在应用程序在舞台上我无法对其进行任何强烈的更改。事情在我的App.js 组件中,我有一个条件

<div className="App">
      
        (props.auth) ? <MainView /> : <Signin /> 
      
</div>

MainView 组件中写入了所有路由。而props.auth 是redux 状态。这工作正常,没有任何挑战。但现在我想使用SignUp 组件,它在用户想要创建帐户时或如果用户想要创建帐户时呈现。 但我提到我的路线是写在MainView 组件中的。因此,如果我填写 singup 路线,我只会看到 &lt;SignIn&gt; 组件,因为 app.js 中的 else 条件。我如何在不改变更多结构或更简单的方式的情况下调用&lt;SignUp&gt; 组件。

更具体

<div className="App">
    
      (props.auth) ? <MainView /> : <Signin /> || <SignUp /> //I want to render both of them if user not logged in. And they both are seperate component.
    
</div>

【问题讨论】:

【参考方案1】:

您可以将这两个组件放在 div 中或使用 React Fragment。

<div className="App">
    
      (props.auth) ? <MainView /> : <> <Signin /> <SignUp /> </> // Using a React fragment
    
</div>
<div className="App">
    
      (props.auth) ? <MainView /> : <div> <Signin /> <SignUp /> </div> // Using a div
    
</div>

更新:

<div className="App">
    
      (props.auth) ? <MainView /> : <>
          flag ? <Signin /> : <SignUp />
      </> // The flag must change values depending on what the user chooses to see; Its default value may be for SignIn
    
</div>

【讨论】:

好的..感谢您的宝贵时间。但是通过这样做,我在同一页面上看到了两个组件。加载登录时,I 条件在登录组件中呈现。 i.e 如果状态为真 -。加载仪表板或显示登录。我如何编写代码以便登录和注册都可用。 @RitikSingh 我明白了。如果您想要最简单的解决方案,请维护一个挂钩/状态变量来决定是显示 SignIn 组件还是 SignUp 组件。稍后,在 SignIn 和 SignUp 中都添加按钮来修改变量,然后使用条件来显示这两个组件。我刚刚更新了我的答案。【参考方案2】:

您可以将这些组件提取到一个新组件(例如登录页面)中,然后在 else 中呈现。

或者将组件包装成一个片段:

<div className="App">
    
      (props.auth) ? <MainView /> : 
<>
<Signin />
<SignUp />
</>
    
</div>

【讨论】:

好的..感谢您的宝贵时间。但是通过这样做,我在同一页面上看到了两个组件。加载登录时,I 条件在登录组件中呈现。即如果状态为真-。加载仪表板或显示登录。我如何编写代码以便登录和注册都可用。 ——【参考方案3】:

然后将其包装在反应片段或 div 中。

<div className="App">

  (props.auth) ? <MainView /> : <> <Signin /> <SignUp /> </> 

【讨论】:

以上是关于React Router 在 else 中加载任何一个组件的主要内容,如果未能解决你的问题,请参考以下文章

无法在其他类组件中加载 React 类组件

在 React Native Image 组件中加载本地图像

Router beforeEach 守卫在 Vue created() 中加载状态之前执行

使用 locationProvider 时,刷新浏览器网页不会在 ui-router 中加载

React Router / Redux应用程序中的数据/模型管理

使用 Webpack 在 React 中加载图像