#reactjs #react-router #react-router-dom
#reactjs #react-маршрутизатор #react-router-dom
Вопрос:
Я использую react router v5 и хотел бы проверить свои маршруты, чтобы убедиться, что они действительны, поскольку моя страница 404 не запускается при отображении недопустимой ссылки, предположительно, потому, что маршрут по-прежнему совпадает, даже если в маршруте нет элемента для отображения, поскольку он недействителен. например, example.com/cat1/product1
является действительным и example.com/cat1/produc1
недействительным.
То же самое для категорий, example.com/cat1
являющихся действительными и example.com/ca1
являющихся недействительными.
В настоящее время он просто не показывает содержимое для недопустимой ссылки вместо моего NotFound
компонента.
Как я могу проверить каждую ссылку, чтобы увидеть, действительна ли она, и если нет, отобразить мой NotFound
компонент?
<Switch>
<Route exact path="/">
<Home categories={categories} products={products} />
</Route>
<Route exact path="/product-categories">
<Products categories={categories} />
</Route>
<Route exact path="/delivery">
<Delivery categories={categories} />
</Route>
<Route exact path="/terms">
<Terms categories={categories} />
</Route>
<Route exact path="/privacy">
<Privacy categories={categories} />
</Route>
<Route exact path="/returns">
<Returns categories={categories} />
</Route>
<Route exact path="/about">
<About categories={categories} />
</Route>
<Route path="/sitemap.xml" onEnter={reload}/>
<Route path="/robots.txt" onEnter={reload}/>
<Route exact path="/:catSlug">
<ProductsList categories={categories} products={products} userCountry={userCountry}/>
</Route>
<Route exact path="/:catSlug/:productSlug">
<Product alertIsVisble={() => dispatch(allActions.showAlert())} categories={categories} products={products} userCountry={userCountry} />
</Route>
<Route>
<NotFound categories={categories} />
</Route>
</Switch>
Комментарии:
1. Это то, что вы должны обработать в своем компоненте. когда для заданного идентификатора данные не найдены. перенаправляет на 404.
2. @VaritJPatel прав, ReactRouter не будет знать, что допустимо в случае
/:catSlug/:productSlug
пути. вы заменяете что-либо его заполнителем, оно будет направлено на ваш компонент. Теперь на стороне компонента / контейнера вы можете принять решение, является ли он допустимым или нет3. Добавление к нему .. ReactRouter предоставляет перехват, это тоже может помочь reactrouter.com/core/api/Hooks/useroutematch