Я хотел бы иметь глобальный маршрут No Match для обработки всех сообщений 404 . После входа в систему все основные представления попадают в макет, заключенный в верхний и нижний колонтитулы. Хотя компонент NotFound должен отображаться за пределами этого макета.
Вот ссылка на "рабочий" образец кода
Вот упрощенный пример кода:
const App = () => (
<Switch>
<Route path="/register" component={Register} />
<Route path="/signin" component={SignIn} />
<Route path="/" component={Home} />
<Route component={NotFound} />
</Switch>
);
const Home = () => (
<div>
<Header />
<main>
<Switch>
<Route exact path="/" component={Main} />
<Route path="/list" component={List} />
<Route path="/tasks" component={Tasks} />
</Switch>
</main>
<Footer />
</div>
);
Приведенный выше образец кода работает для рендеринга макета по своему усмотрению, но отображает пустой макет по несовпадающим URL-адресам. Если я установлю корневой путь приложения на exact
, я могу получить NotFound, но потеряю домашние маршруты
Несмотря на вариации использования / неиспользования exact
на корнях, перемещая корни в конец списка Route
s, я могу заставить части ожидаемого поведения работать, но не все это работает согласованно.
Если я захожу в "/", я ожидаю увидеть:
Some Header Thing
Home
Some Footer Thing
Если я захожу в "/ list", я ожидаю увидеть:
Some Header Thing
List
Some Footer Thing
Если я захожу в "/ register", я ожидаю увидеть:
Register
Если я захожу в "/ foobar", я ожидаю увидеть:
Not Found