Я думаю, что вам нужно использовать match
в вашем URL, поскольку разделы одинаковы, и единственное отличие состоит в том, что там есть имена.
Рассмотрите возможность использования одного маршрута с Container
для загрузкиразделы:
<Switch>
<Route exact path="/section/:section/home" component={SectionContainer} />
<Route component={NotFoundPage} />
</Switch>
В SectionContainer
вы можете получить доступ к section
из url
следующим образом:
const { section } = this.props.match.params;
или const activeSection = this.props.match.params.section;
Таким образом, вы сможете получить из своего бэк-энда информацию этого раздела.
Более того, если вам нужно передать некоторые новые реквизиты в свой контейнер, вы можете сделать это следующим образом:
const SpecialSectionContainer= (props) => (
<SectionContainer
special="this section is special"
{...props}
/>
);
, а затем <Route exact path="/section/:section/special/home" component={SpecialSectionContainer} />
.
Оказавшись в вашем разделе «Контейнер», вы можете переключать известные разделы для загрузки соответствующих функций, и, если вы используете API управления состоянием, например, redux, все зависит от вашего редуктора / саги.решить, какую именно реализацию функции вызывать в зависимости от загруженного раздела.
Надеюсь, это решит вашу проблему.
С уважением.
РЕДАКТИРОВАТЬ
например, используя redux
, вы можете сделать следующее:
componentWillMount = () => {
this.props.loadSection(this.props.match.params.section);
};
это отправит действие, которое будет перехвачено вашим промежуточным программным обеспечением с побочными эффектами (в основном thunk или saga), и выполнит вызов API, чтобы получить ваши данные и сохранить их в store
.и ваш SectionContainer
, наконец, легко загрузит их и передаст функциональному компоненту just display them
.