我认为 React Router (v4) 的作者只是添加了 withRouter HOC 来安抚某些用户。但是,我相信更好的方法是只使用渲染道具并制作一个简单的 PropsRoute 组件来传递这些道具。这更容易测试,因为它不像 withRouter 那样“连接”组件。将一堆嵌套组件包裹在 withRouter 中,这不会很有趣。另一个好处是你也可以通过你想要的任何道具来使用这个通道。这是使用渲染道具的简单示例。(几乎是他们网站https://reacttraining.com/react-router/web/api/Route/render-func的确切示例)(src/components/routes/props-route)
import React from 'react';
import { Route } from 'react-router';
export const PropsRoute = ({ component: Component, ...props }) => (
<Route
{ ...props }
render={ renderProps => (<Component { ...renderProps } { ...props } />) }
/>
);
export default PropsRoute;
用法:(注意获取路由参数(match.params)你可以只使用这个组件,这些将被传递给你)
import React from 'react';
import PropsRoute from 'src/components/routes/props-route';
export const someComponent = props => (<PropsRoute component={ Profile } />);
还请注意,您也可以通过这种方式传递您想要的任何额外道具
<PropsRoute isFetching={ isFetchingProfile } title="User Profile" component={ Profile } />