Маршрутизатор React V4 отображает несколько маршрутов
Я создаю SPA, и я пытаюсь настроить маршрутизацию в приложении, используя react-router-dom
пакета версии 4.1.1
.
мое определение маршрута ниже:
<BrowserRouter>
<div>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="404" component={NotFound} />
<Route path="*" component={NotFound} />
</div>
</BrowserRouter>
в основном, я хочу настроить маршрутизацию так, чтобы любой запрос на страницу, для которой не определен маршрут, шел в {NotFound}
компонент.
как этого можно добиться?
Решение выше отображает оба Login
и NotFound
компонент при запросе /login
страница.
С уважением
3 ответов
вот пример официальный учебник, как избежать рендеринга нескольких маршрутов
import { Switch, Route } from 'react-router
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
<Route path="/:user" component={User}/>
<Route component={NoMatch}/>
</Switch>
использовать Switch
чтобы отобразить первое совпадение маршрута, необходимо импортировать Switch
перед использованием
import {Switch} from 'react-router';
<BrowserRouter>
<Switch>
<Route exact path="/" component={Login} />
<Route path="/login" component={Login} />
<Route path="404" component={NotFound} />
<Route path="*" component={NotFound} />
</Switch>
</BrowserRouter>
по словам docs
<Switch>
уникален тем, что он отображает маршрут исключительно. В контраст, каждый<Route>
что соответствует местоположению рендеринга включительно.теперь, если мы в
/login
,<Switch>
начнет искать соответствие<Route>
.<Route path="/login"/>
будет соответствовать и<Switch>
перестанет искать спички и render<Login>
. маршрут иначе спички/login
С/login
и*
и отображает оба маршрута
однако при использовании Switch порядок маршрутов имеет значение, убедитесь, что вы добавляете префиксные маршруты после других маршрутов. Например, "/ home "должно быть после" / " в порядке маршрута, иначе вы можете использовать exact
prop
</Switch>
<Route exact path="/" component={Login} />
<Route path="/home" component={Home} />
</Switch>
Я думаю, что страница NotFound отображается из-за <Route path="*" component={NotFound} />
правило. Свойство Path маршрутизатора принимает любой допустимый URL-путь, который понимает path-to-regexp. So ' * ' означает ноль или более совпадений параметров