Я хочу разбить мой файл маршрутизации на компоненты, чтобы вместо
<BrowserRouter basename="/recruiter" >
<div>
<Nav />
<Switch>
/* HOMEPAGE ROUTES */
<Route exact path="/" component={Home} />
<Route exact path="/how-and-why" component={Pdf} />
<Route path="/sign-in" component={SignIn} />
<Route path="/investor-sign-in" component={SignIn} />
<Route exact path="/sign-in-error" component={SignInError} />
/* ADMIN ROUTES */
{this.props.AdminUser ?
<Route exact path="/welcome" component={LandingPage} />
<Route exact path="/companies" component={CompaniesTable} />
<Route exact path="/:companyId/edit-success" component={EditSuccess} />
<Route exact path="/:companyId" component={SingleCompanyTable} />
<Route exact path="/:companyId/:formId" component={SingleCompanyEdit} />
...10+ more Admin routes
: <Redirect to="/" />
}
/*USER ROUTES */
{this.props.regularUser ?
...additoinal User routes
: null
}
</Switch>
</div>
</BrowserRouter>
Это
<BrowserRouter basename="/recruiter" >
<div>
<Nav />
<Switch>
<Homepage Routes />
<AdminRoutes adminUser={this.props.adminUser} />
<UserRoutes regularUser={this.props.regularUser} />
//catch all
<Route component={NotFound} />
</Switch>
</BrowserRouter>
Каждый компонент маршрута (например, AdminRoutes) выглядит как
export const AdminRoutes = (props) => {
return props.adminUser ?
<div>
<Route exact path="/welcome" component={LandingPage} />
<Route exact path="/companies" component={CompaniesTable} />
<Route exact path="/:companyId/edit-success" component={EditSuccess} />
<Route exact path="/:companyId" component={SingleCompanyTable} />
<Route exact path="/:companyId/:formId" component={SingleCompanyEdit} />
...10+ more routes
</div>
: <Redirect to="/" />
В моем понимании это должен быть один и тот же рендер между двумя вариантами, за исключением окружающих элементов div в дочернем компоненте, но в этом случае я могу добраться до маршрутов в первом компоненте, в этом примере HomepageRoutes, но ни один из маршруты в AdminRoutes, UserRoutes и т. д.
У меня ранее это работало, оборачивая подкомпоненты в коммутаторы, но затем все маршруты / компоненты перехвата (что является моим 404 не найденным) отображаются все время из-за контекстного изменения местоположения между внешним и внутренним коммутаторами.
Я прочитал довольно много о вложенных маршрутах, но, насколько я понимаю, это включает в себя обертывание суб-маршрутов в другом маршруте, а подмаршруты разделяют основной маршрут на своем пути
е
const subRoute = () => {
return (
<Route path="/admin >
/* this should work? */
<Route path=/admin/:profile component={AdminProfile} />
/*doesn't work? */
<Route path="/add-company" component={AddCompany} />
</Route>
)
}
Я хотел бы избежать этого, если это возможно, поэтому мне не нужно переписывать все мои маршруты, которые я хотел бы, чтобы "component-ize"
Соответствующая информация package.json:
"react": "^16.4.2",
"react-bootstrap": "^0.32.1",
"react-dom": "^16.4.2",
"react-loadable": "^5.4.0",
"react-redux": "^5.0.6",
"react-router-bootstrap": "^0.24.4",
"react-router-dom": "^4.3.1",
"react-test-renderer": "^16.4.2",
"redux": "^3.7.2",
"redux-form": "^7.3.0",
"redux-thunk": "^2.2.0"
Заранее благодарим вас за ваше время и, пожалуйста, дайте мне знать, какую другую информацию предоставить.