React Router v6 — проверьте, активен ли дочерний элемент / <Outlet/> вернет компонент?

Добрый день, Не могли бы вы помочь мне с моей проблемой с вложенным элементом react-router v6, в частности, с дочерним элементом?

Допустим, у меня есть эта маршрутизация

<Routes>
    <Route path = "customer" element = {<CustomerIndex />} >
         <Route path = ":customeId" element = {<CustomerDetail />} />
         <Route path = "create" element = {<CustomerForm />} />
    </Route>
</Routes>

И компонент "CustomerIndex"

function CustomerPage(){
    const {customerId} = useParams();
    return (
            <>
               //.....Bla bla bla index table etc etc etc end of thinking capacity        
               <ComponentToDisplayModal display = {Boolean(customerId)} >
                    <Outlet />
               </ComponentToDisplayModal>
            </>
         );
}

Теперь, если я перейду к "/customer/3", CustomerIndex отобразит модальный компонент (display=true) и потому, что константа "customerId" определяется параметром useParams.

Но если бы я хотел показать компонент «CustomerForm», перейдя к «/customer/create», конечно, «ComponentToDisplayModal» не будет отображаться, потому что идентификатор клиента равен нулю.

Так что, конечно, я хотел бы иметь это вместо

const display = Boolean(customerId) || isAnyChildPath;
.....
<ComponentToDisplayModal {...{display}}>

Теперь, как я могу установить для константы «isAnyChildPath» значение «TRUE», если путь «/customer/*», и «FALSE», если путь «/customer», или, может быть, проверить, вернет ли компонент (например, «/ клиент/создать", "/клиент/4") или нет ("/клиент")?

Пока я просто использую ручной метод

const location = useLocation();
const display = Boolean(customerId) || location.pathname === "/customer/create"

Но я хотел бы узнать, существует ли более элегантный метод на случай, если в будущем мне понадобится добавить несколько других статических дочерних элементов.

Большое тебе спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы могли бы немного упростить проверку дочернего маршрута, используя хук useMatch и проверяя, соответствует ли текущий путь какому-либо дочернему маршруту, вместо того, чтобы проверять какие-либо параметры пути маршрута.

useMatch

declare function useMatch<ParamKey extends string = string>(
  pattern: PathPattern | string
): PathMatch<ParamKey> | null;

Returns match data about a route at the given path relative to the current location.

Идея состоит в том, что когда маршрут совпадает, возвращается определенный объект совпадения, в противном случае возвращается null для несоответствий.

"/customer/:path" может соответствовать как "/customer/:id", так и "/customer/create".

Пример:

function CustomerPage(){
  const isMatch = useMatch("/customer/:path");

  return (
    <>
      //.....Bla bla bla index table etc etc etc end of thinking capacity        
      <ComponentToDisplayModal display = {Boolean(isMatch)} >
        <Outlet />
      </ComponentToDisplayModal>
    </>
  );
}

Edit react-routger-v6-check-wether-child-element-is-active-outlet-would-return

Другие вопросы по теме