react-router中公共部分Header和SideBar的编写方式

5 篇文章 0 订阅
3 篇文章 0 订阅

react-router中公共部分Header和SideBar的编写方式

初学react-router,在项目中涉及登录页面是独立的,其他页面拥有共同的HeaderSideBar组件,在这里把这两个公共部分封装到App中。

一种实现方式,把App通过import到每个页面,对每个页面进行封装。
Routes定义如下:

    <ConnectedRouter history={history}>
        <div>
            <Route exact path="/login" component={LoginPage} />
            <Route exact path="/" component={privateRoute(App)} />
            <Route path="/users" component={privateRoute(UserListPage)} />
            <Route path="/chpwd" component={privateRoute(ChpwdPage)} />
            <Route path="/user" component={privateRoute(User)} />
            <Route path="/logout"  onEnter={props.logout} />

        </div>
    </ConnectedRouter>

在调试时,发现在每个页面的render中需要用App包装,比较繁琐,同时每个页面使用Router跳转时,
HeaderSideBar组件在没有变化时,也在重复渲染。

如果使用下面方法编写Routes,可以解决公共部分不需要重复渲染,同时每个页面不必用App单独封装。

    <ConnectedRouter history={history}>
        <div>
            <Route exact path="/login" component={LoginPage} />
            <Route exact path="/" component={privateRoute(App)} />
            <Route path="/app" component={privateRoute(App)} />
            <Route path="/app/users" component={privateRoute(UserListPage)} />
            <Route path="/app/chpwd" component={privateRoute(ChpwdPage)} />
            <Route path="/app/user" component={privateRoute(User)} />
            <Route path="/logout"  onEnter={props.logout} />

        </div>
    </ConnectedRouter>

由于Route是可以多个同时匹配的一起使用,比如: ‘/app/users’, 会同时渲染’/app’和’/app/users’两个路由模块。在这里’/app’模块是公共部分,当无数据变化时,react可以自行判断避免重复渲染。

第三种方法是把路由嵌入到页面layout中,把对应路由放在页面对应的位置。


      <Provider store={store}>
        <ConnectedRouter history={history}>
        <div id="application">
          <Route exact path="/login" component={LoginPage} />
        {devTools}
          <HeaderPage />
            <div className="container">
              <nav className="nav left">
                <LeftPage />
              </nav>
              {/* <TopMenu items={menuItems} /> */}
              <section className="main">
                <Route path="/users" component={privateRoute(UserListPage)} />
                <Route path="/chpwd" component={privateRoute(ChpwdPage)} />
              </section>
            </div>
        </div>
          </ConnectedRouter>
      </Provider>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值