代码之家  ›  专栏  ›  技术社区  ›  Sharon

使用ReactJS,如何使用Route来显示不同的组件?

  •  0
  • Sharon  · 技术社区  · 5 年前

    我是ReactJS的新手,正在尝试确定是否可以将其用于正在构建的应用程序。

    我已经创建了Sign-In和Register页面,但是在这两个页面中我有一些相同的代码,我想重新使用它。

    const App = () => (
      <Router>
        <div>
          <Route path={ROUTES.REGISTER} component={RegisterPage} />
          <Route path={ROUTES.SIGNIN}   component={SignInPage} />
          <Route component={SignInPage} />
        </div>
      </Router>
    );
    

    因此,如果我转到/register,我会看到RegisterPage组件,如果我转到/signin,我会看到SignInPage组件。(如果我去别的地方,我会看到签名页。)

    不过,我还有几个页面要添加,样式相同,我希望能够有一个通用的“登录页”,其中显示适当的组件。然后,一旦用户登录,我需要一个“仪表板页”,其中显示了适当的组件。

    所以,LandingPage和DashboardPage只是其他组件的包装,我希望路由是这样工作的:

    “登录页/SignInPage”-显示登录页样式,其中包含SignIn组件 “landingpage”-显示landingpage样式,其中包含SignIn组件 'dashboardpage/'-显示默认的仪表板

    const App = () => (
      <Router>
        <div>
          <Route path={ROUTES.LANDINGPAGE} component={LandingPage} subPage={SignInForm} />
          <Route path={ROUTES.REGISTER}    component={LandingPage} subPage={RegisterForm} />
          <Route path={ROUTES.SIGNIN}      component={LandingPage} subPage={SignInForm} />
          <Route path={ROUTES.DASHBOARD}   component={DashboardPage} subPage={Overview} />
          <Route component={LandingPage} subPage={SignInForm} />
        </div>
      </Router>
    );
    

    1 回复  |  直到 5 年前
        1
  •  1
  •   Shubham Khatri    5 年前

    const App = () => (
      <Router>
        <div>
          <Route path={ROUTES.LANDINGPAGE}  render={(rProps) => <LandingPage {...rProps} subPage={SignInForm} />}/>
          <Route path={ROUTES.REGISTER}    render={(rProps) => <LandingPage {...rProps} subPage={RegisterForm} />}/>
          <Route path={ROUTES.SIGNIN} render={(rProps) => <LandingPage {...rProps} subPage={SignInForm} />}} subPage={SignInForm} />
          <Route path={ROUTES.DASHBOARD}  render={(rProps) => <DashboardPage {...rProps} subPage={Overview} />}} />
          <Route render={(rProps) => <LandingPage {...rProps} subPage={SignInForm} />} />
        </div>
      </Router>
    );
    

    但是,您可以编写一个自定义路由,将登陆页呈现为如下所示的布局

    const RouteWithLayout = ({subPage, component: Component,...props}) => {
        return <Route {...props} render={(rProps) => <Component {...rProps} subPage={subPage} />} />
    }
    

    const App = () => (
      <Router>
        <div>
          <RouteWithLayout path={ROUTES.LANDINGPAGE} component={LandingPage} subPage={SignInForm} />
          <RouteWithLayout path={ROUTES.REGISTER}    component={LandingPage} subPage={RegisterForm} />
          <RouteWithLayout path={ROUTES.SIGNIN}      component={LandingPage} subPage={SignInForm} />
          <RouteWithLayout path={ROUTES.DASHBOARD}   component={DashboardPage} subPage={Overview} />
          <RouteWithLayout component={LandingPage} subPage={SignInForm} />
        </div>
      </Router>
    );