簡體   English   中英

為什么不能從 2 個 JSX 元素渲染?

[英]Why you can't render from 2 JSX element?

我的目標是使用array.map方法渲染<Route /> 現在,我正在嘗試使用 react 鈎子傳遞返回值,但問題是localhost:3000/login return <div>Login</div>localhost:3000/dashboard什么都不返回。

我的預期結果是當我訪問localhost:3000/dashboard JSX.element 返回<div>Dashboard</div>

應用程序.js

import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";

const PublicRouteComponents = () => {
  return <Route exact path="/login" render={() => <div>Login</div>} />
};

const PrivateRouteComponents = () => {
  return <Route exact path="/dashboard" render={() => <div>Dashboard</div>} />
};

function App() {

  return (
    <Router>
      <Switch>
        {/* <Route exact path="/login" render={() => <div>Login</div>} />
        <Route exact path="/dashboard" render={() => <div>Dashboard</div>} /> */}

        <PublicRouteComponents />
        <PrivateRouteComponents />
      </Switch>
    </Router>
  );
}

export default App;

編輯:

目前的解決辦法是放棄react hook,直接去JSX.element

function App() {
  const PublicRouteComponents = PublicRoutes.map(
    ({restricted, component, path}, key) => <PublicRoute restricted={restricted} component={component} exact path={path} key={key} />
  )

  const PrivateRouteComponents = PrivateRoutes.map(
    ({component, path}, key) => <PrivateRoute component={component} exact path={path} key={key} />
  )

  return (
    <Router>
      <Switch>
        {PublicRouteComponents}
        {PrivateRouteComponents}
      </Switch>
    </Router>
  );
}

但是,我的導師告訴我,如果你給出一個表達式而不是類,當{PublicRouteComponents}的組件發生變化時,應用程序將被重新渲染。 相反,如果您使用<PublicRouteComponents /> ,當類更改時,只會重新呈現<PublicRouteComponents />

我希望實現這一目標。

在玩了一會兒之后,我在你的第一個代碼示例中發現了潛在的問題。

基本上,React 路由器要求在Router組件的子組件中設置路由pathexact道具。

import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";

const LoginRoute = () => {
  return <Route render={() => <div>Login</div>} />;
};

const DashboardRoute = () => {
  return <Route render={() => <div>Dashboard</div>} />;
};

export default function App() {
  return (
    <Router>
      <Switch>
        <DashboardRoute exact path="/dashboard" />
        <LoginRoute exact path="/login" />
      </Switch>
    </Router>
  );
}

如果您將pathexact道具移動到DashboardRouteLoginRoute組件,則反應路由器無法匹配這些路由。

查看代碼和框

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM