Я использую реактивный маршрутизатор V4 и клиент apollo. У меня есть несколько маршрутов, которые считаются частными. У меня есть эти маршруты в отдельном компоненте. Я использую withRouter (), чтобы обернуть компонент PrivateRoute, чтобы получить весь передаваемый маршрут. Я также обертываю это в запросе graphql, чтобы знать, что пользователь вошел в систему. Моя проблема в том, что я не могу получить и данные из graphql, и данные маршрута.
Определяя маршрут таким образом, я получаю данные apollo, но не совпадение: id
<Route exact path="/people/:id" render={() => <Person {...this.props} />} />
И если я изменю маршрут на это, я получу идентификатор params, но в моих реквизитах нет данных apollo
<Route {...this.props} exact path="/people/:id" component={Person} />
Вот мой основной компонент маршрута
const Routes = () => (
<Router>
<div>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/login" component={Login} />
<Route path="/create-account" component={CreateUser} />
<PrivateRouteContainer />
</Switch>
</div>
</Router>
);
Вот мои PrivateRoute и PrivateRouteContainer
class PrivateRoute extends Component {
render() {
if (this.props.data.loading) {
return <Loading />;
} else if (this.props.data.user) {
return (
<div>
<VerticalNavFixed />
<article className="docs-content">
<Switch>
<Route {...this.props} exact path="/people/:id" component={Person} />
</Switch>
</article>
</div>
);
}
return <Redirect to={{ pathname: '/login', state: { from: this.props.location } }} />;
}
}
const PrivateRouteContainer = graphql(userQuery, { options: { fetchPolicy: 'network-only' } })(withRouter(PrivateRoute));