我有一个动态路由,配置为设置处理模态,如下所示:
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以反映新路径。)
创建exact
后Route
确实是固定值吗?如果是这样,是否有更清洁/传统的方式来做到这一点?!
我想要实现的是避免在任何其他路径上呈现LondingModule
,但允许在LandingModule上弹出登录或注册(或任何将来)模式。不幸的是,没有exact
,它会在每条路径上呈现。