#javascript #reactjs #react-router-dom
Вопрос:
У меня есть сценарий, я хочу иметь 2 разных интерфейса в существующем приложении react. У V1 (версии 1) будет другой пользовательский интерфейс, а у V2 (версии 2) будет другой пользовательский интерфейс.
Существующая реализация выглядит следующим образом,
<BrowserRouter basename=“/us”>
<Version1Layout>
<Switch>
<Route exact={true} path=“/” component={Home} />
<Route exact={true} path=“/about” component={About} />
</Switch>
</Version1Layout>
</BrowserRouter >
Но я хочу что-то вроде этого:-
<div>
<BrowserRouter basename=“/us/v1”>
<Version1Layout>
<Switch>
<Route exact={true} path=“/” component={Home} />
<Route exact={true} path=“/about” component={About} />
</Switch>
</Version1Layout>
</BrowserRouter>
<BrowserRouter basename=“/us/v2”>
<Version2Layout>
<Switch>
<Route exact={true} path=“/report1” component={ReportView1} />
<Route exact={true} path=“/report2” component={ReportView2} />
</Switch>
</Version2Layout>
</BrowserRouter>
</div>
Возможно ли иметь несколько браузеров параллельно?
Комментарии:
1. Взгляните на вложенную маршрутизацию reactrouter.com/web/guides/quick-start/…
2. @Drew Я пытался, но я получаю ошибку.
3. Пожалуйста, покажите нам, что вы пробовали, и, поскольку вы говорите, что произошла ошибка, пожалуйста, также включите это в свой вопрос, это своего рода важная деталь/информация.
Ответ №1:
Вы не можете использовать несколько маршрутизаторов, но вместо этого вы можете использовать вложенные маршрутизаторы. См.: https://reactrouter.com/web/example/nesting
Комментарии:
1. Я говорю о нескольких браузерах-маршрутизаторах параллельно. Не вложенный маршрут.
2. Нет. Это невозможно. У вас может быть только один браузер. Остальное вложите внутрь.
3. Создайте основной маршрутизатор браузера, а затем вложите версии внутрь.
4. Это просто откровенная ложь.
Router
это просто компонент React, предоставляющий контекст маршрутизации, вы можете отображать их несколько. Возникает проблема, когда вы начинаете вкладывать маршрутизаторы в маршрутизаторы, или, скорее, это контексты маршрутизации в других контекстах маршрутизации. Контексты «внешних» маршрутизаторов не знают о том, что обработали вложенные «внутренние» маршрутизаторы.
Ответ №2:
Вам не нужно использовать их параллельно:
<div>
<BrowserRouter basename=“/us”>
<Switch>
<Version1Layout path={'/v1'}>
<Switch>
<Route exact={true} path=“/” component={Home} />
<Route exact={true} path=“/about” component={About} />
</Switch>
</Version1Layout>
<Version2Layout path={'/v2'}>
<Switch>
<Route exact={true} path=“/report1” component={ReportView1} />
<Route exact={true} path=“/report2” component={ReportView2} />
</Switch>
</Version2Layout>
<Redirect to={'/v1'}/>
</Switch>
</BrowserRouter>
</div>
Самое замечательное в том, что Switch
он просто отображает первый компонент, у которого есть соответствующая path
опора — вам не нужно использовать события Route
.