我通过包装Provider
Router
提供商店
<Provider {...stores}>
<BrowserRouter >
<App />
</BrowserRouter>
</Provider>
在App
中,我有两个成分,Header
和Main
。
Header
包含到路由的Link
,而Main
包含路由Switch
:
<div className="main">
<Route exact path='/' component={Home} />
<Route exact path='/login' component={Login} />
{/* <UnvalidatedUserRoute exact path='/login' store={this.props.User} component={Login} /> */}
<ValidatedUserRoute exact path='/todos' store={this.props.User} component={UserTodos} />
</div>
ValidatedUserRoute
只是一项确保用户通过身份验证(如果未通过身份验证)的功能,
const ValidatedUserRoute = ({component: Component}, store, ...rest) => (
<Route
{...rest}
render={props =>
store.validated ? (
<Component {...props} />) : (
<Redirect to={{
pathname: "/"
}}
/>
)
} />
);
export default ValidatedUserRoute
问题
当我单击链接时,我的URL确实发生了更改,但是组件未呈现,就像页面停留在加载网页时首先加载的组件上一样。
> <Link to="/">Home</Link>
<Link to='/login'>Log In</Link>
答案 0 :(得分:1)
,如果您使用的是新的react-router-dom
。那么您必须使用该库提供的withRouter
Hoc,并用它包装您的组件。
import {withRouter} from 'react-router-dom'
const ValidatedUserRoute = ({component: Component}, store, ...rest) => (
<Route
{...rest}
render={props =>
store.validated ? (
<Component {...props} />) : (
<Redirect to={{
pathname: "/"
}}
/>
)
} />
);
export default withRouter(ValidatedUserRoute)
任何组件负责执行路由。将其包装在withRouter