【问题标题】:ReactJS Routing Page RefreshReactJS 路由页面刷新
【发布时间】:2020-12-16 16:10:22
【问题描述】:

目前正在使用 ReactJS 构建一个小型 Web 应用程序。我有以下父函数:

    const Main = () => {
        return (
            <div className="dialog-base">
                <BrowserRouter>
                    <Switch>
                        <Route exact path="/login" component={Login}></Route>
                        <Route exact path="/login/forgot_password" component={ForgotPwd}></Route>
                        <Route exact path="/login/reset_password/:key" component={ResetPwd}></Route>
                        <Route exact path="/portal" component={Portal}></Route>
                    </Switch>
                </BrowserRouter>
            </div>
        );
     }

以下是“门户”组件:

class Portal extends React.Component {
    render = () => {
        return (
            <BrowserRouter basename="/main">
                 <div className="navmenu">
                     <NavLink to="messaging" activeClassName="selected">Messaging</NavLink>
                     <NavLink to="files" activeClassName="selected"></NavLink>
                     <NavLink to="payledger" activeClassName="selected"></NavLink>
                 </div>
                 <div className="apparea">
                     <Switch>
                         <Route path="/messaging" component={Messaging}></Route>
                         <Route path="/files" component={Files}></Route>
                         <Route path="/payledger" component={PayLedger}></Route>
                     </Switch>
                 </div>
            </BrowserRouter>
        );
    }
}

加载门户组件并刷新网页时,页面变为空白。我假设这与嵌套路由有关?任何有关如何修复它的帮助将不胜感激。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您不需要两个&lt;BrowserRouter /&gt;。只需在您的顶级组件中定义一个&lt;BrowserRouter /&gt;。 在 react-router-dom v4+ 中,&lt;Route /&gt; 就像一个常规组件,当路径与 URL 匹配时,您可以在组件内部使用它来呈现 UI。

    这是工作代码框example。 确保不要将 exact 放在你的父级 &lt;Route /&gt; 上,因为当你有像 /main/messaging 这样的子路由时,&lt;Route exact path="/main" /&gt; 永远不会渲染,因此也无法渲染该路由的子路由。

    您保持&lt;Main /&gt; 组件不变,但从&lt;Route path='/portal' /&gt; 中删除exact 并更改&lt;Portal /&gt;

    class Portal extends React.Component {
      render = () => {
          return (
             <React.Fragment>
                 <div className="navmenu">
                     <NavLink to="/portal/messaging" activeClassName="selected">Messaging</NavLink>
                     <NavLink to="/portal/files" activeClassName="selected"></NavLink>
                     <NavLink to="/portal/payledger" activeClassName="selected"></NavLink>
                 </div>
                 <div className="apparea">
                     <Switch>
                         <Route path="/portal/messaging" component={Messaging}></Route>
                         <Route path="/portal/files" component={Files}></Route>
                         <Route path="/portal/payledger" component={PayLedger}></Route>
                     </Switch>
                 </div>
              </React.Fragment>
          );
      }
    }
    

    【讨论】:

    • 从 Portal 组件中移除 &lt;BrowserRouter&gt; 不会在 apparea div 中呈现组件。
    • 自从您删除了BrowserRouter 后,您是否还在您的路线中包含了/main
    • 我做到了。 Portal 组件呈现正常,但单击其中一个 NavLink 会使页面变为空白。
    • 为了加快这个过程,我在我的答案中添加了一个代码示例。如果这对你不起作用,请告诉我。
    • 对了,我把portal组件中的&lt;BrowserRouter&gt;换成了&lt;React.Fragment&gt;
    猜你喜欢
    • 2016-06-15
    • 2019-05-15
    • 2017-10-06
    • 1970-01-01
    • 2022-01-05
    • 2020-09-18
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多