#reactjs #react-router #react-router-dom
#реагирует на #реагировать-маршрутизатор #реагировать-маршрутизатор-дом
Вопрос:
Я использую маршрутизатор React v6, и у меня есть эти маршруты (только для этого вопроса):
return ( lt;BrowserRoutergt; lt;Routesgt; lt;Route path="/" element={lt;HomePage /gt;} /gt; lt;Route path="about" element={lt;AboutPage /gt;} /gt; lt;Route path="items" element={lt;AllItemsPage /gt;} /gt; lt;Route path="items/:id" element={lt;ItemPage /gt;} /gt; lt;Route path="*" element={lt;NotFoundPage /gt;} /gt; lt;/Routesgt; lt;/BrowserRoutergt; );
Теперь я хочу получить путь к шаблону items/:id
внутри lt;ItemPage /gt;
компонента.
В настоящее время, когда я использую useLocation()
hook, я получаю путь, items/2
например, и мне нужны оба — шаблон и путь.
Версии
- Реагировать:
^17.0.2
- Реагировать на DOM маршрутизатора:
^6.0.2
Комментарии:
1. Когда вы говорите «шаблон», вы имеете в виду шаблон? RRDv6, похоже, не предоставляет шаблоны маршрутов для дочерних компонентов. В чем здесь польза, для чего вы пытаетесь решить? Вы пытаетесь построить вложенные ссылки/маршруты, такие как
useRoutedMatch
крюк, который использовался в v5 со свойствамиpath
иurl
?
Ответ №1:
Просматривая документы API React router v6, AFAIK не видит способа получить шаблон напрямую.
Вашим лучшим выбором было бы передать реквизит вашим компонентам, таким как
lt;Route path="items/:id" element={lt;ItemPage pattern="items/:id"/gt;} /gt;
Лучше хранить ваши шаблоны в объекте
const paths = { home: "/", ... items: "items/:id" } ... lt;Route path={paths.items} element={lt;ItemPage pattern={paths.items}/gt;} /gt;