是否可以在react-router路由上设置确切的属性?

时间:2017-08-01 16:43:00

标签: reactjs react-redux react-router-v4 react-router-redux

我有一个动态路由,配置为设置处理模态,如下所示:

const DynamicRoute = ({ exact, path, isAsync, isAbstract, isPrivate, Component, modal, ...rest }) =>
  <Route
    exact={!!modal.active ? false : exact} path={!!modal.active ? `${modal.path}` : path}
    render={({ history, location, match }) => (
      <Component
        match={match}
        isAsync={isAsync}
        isAbstract={isAbstract}
        history={history}
        isPrivate={isPrivate}
        location={location}
        modal={modal}
        {...rest}
      />
    )}
  />

这是一个Switch从Redux中获取模态的包裹:

const ActionContainer = ({modal}) => {
  return (
    <Switch>
      <DynamicRoute exact path='/' modal={modal} Component={LandingModule} />
      <Route exact path='/profile' mod={ProfileModule} />
    </Switch>
  )
}

const mapStateToProps = ({ modal }: Object) => ({
  modal
})

登陆模块如下所示:

const LandingModule = ({modal}) =>
  <div className='landing-container'>
    <Header inverted />
    {/* Content */}
    {/* Intro */}
    {!!modal.active ? <Route path={`${modal.path}`} component={modal.modal} /> : ''}
  </div>

我遇到的问题是,如果我在外部路由上将exact设置为true,那么似乎react-router已经缓存了这个并且不会在modal时呈现路由在商店里设置。如果我没有设置exact,则会正确呈现模式(即使更改URL以反映新路径。)

创建exactRoute确实是固定值吗?如果是这样,是否有更清洁/传统的方式来做到这一点?!

我想要实现的是避免在任何其他路径上呈现LondingModule,但允许在LandingModule上弹出登录或注册(或任何将来)模式。不幸的是,没有exact,它会在每条路径上呈现。

0 个答案:

没有答案