Как отмечалось в других ответах, это обрабатывается с помощью render , который приводит пример:
<Route path="/home" render={() => <div>Home</div>}/>
Однако я (и многие другие) нахожу этот синтаксис довольно уродливым,В оригинальном выпуске о пропеллерной передаче с Route, есть популярная оболочка, которую я хотел всплыть, я сделал некоторые улучшения и предлагаю эту краткую и эффективную оболочку:
const PropsRoute = ({component, path, ...otherProps}) => (
<Route {...otherProps} path={path} render={routeProps =>
React.createElement(component, {...otherProps, ...routeProps})
} />
)
Это можно использовать, как и следовало ожидать:
<Router>
<main>
<PropsRoute exact path="/" component={Home} auth={this.state.auth} />
</main>
</router>
Обратите внимание, что при этом пропустятся реквизиты маршрута до компонента. Любая реквизит, переданный в Route, который не является «компонентом» или «путем», будет передан компоненту.В этой формулировке любой routeProps (передаваемый реагирующим маршрутизатором) переопределяет пользовательские реквизиты, передаваемые с помощью этого синтаксиса.
Затем его можно довольно легко расширить, чтобы создать общий шаблон входа в систему:
const AuthedRoute = ({auth, ...props}) =>
!auth.valid()? <Redirect to="/login" />: <PropsRoute {...{...props, auth: auth}} />;
Редактировать: я в значительной степени отказался от этого подхода с 2019 года в пользу чего-то вроде этого:
<Route {...{
path: "/path/to/component",
render: ({ location }) => <MyComponent {...{
location
}}/>
}}/>
Это может показаться немного грубее, но это делает глубоко вложенные рендеринг деревьев намного более четкими,и позволяет использовать полный Javascript в параметрах JSX.