React Router v4 не отображает компонент в маршруте с параметрами

Я работаю над проектом на сайте электронной коммерции, и в настоящее время у меня настроены правильные маршруты для домашней страницы на "/" и для страницы со списком продуктов на "/:id". Я пытаюсь настроить маршрут для одной страницы продукта, однако response-router не отображает мой компонент вообще.

Index.js

ReactDOM.render((
  <BrowserRouter>
    <App />
  </BrowserRouter>), document.getElementById('root'));
  registerServiceWorker();

App.js

<Switch>
  <Route exact path = "/" render = {()=> apiDataLoaded ? <HomeLayout data = {data}/> : <div>Loading...</div>}/>
  <Route path = "/:id" render = {(props)=> <ProductListLayout {...props} />} />
</Switch>

Листинг Компонент

return (
  <Switch>
    <div className = "product-list-item-card">
      <div className = "product-list-item-img" style = {bgImage}></div>
      <div className = "product-list-item-content">
        <div className = "product-list-item-overlay">
          <Link to = {`/products/${id}`}>
              <DetailsBtn />
          </Link>
        </div>
        <h3>{name}</h3>
        <h6>{brand}</h6>
        <span>${msrp}</span>
        <p>${sale}</p>
      </div>
    </div>
    <Route path = {'/products/:product_id'} render = {()=> <div>Product Page</div>}/>
  </Switch>
)}

В компоненте листинга выше, когда я проверяю ссылку, изменяется только URL-адрес? Есть идеи относительно того, что я делаю неправильно? Спасибо.

Решено

Изменение порядка маршрутов в App.js было лишь частью решения. Я также переместил свой маршрут из компонента Listing в App.js в верхней части порядка маршрутов, и теперь он работает!

Новый App.js

<Switch>
  <Route path = {`/products/:product_id`} component = {ProductLayout} />
  <Route path = "/:id" render = {(props)=> <ProductListLayout {...props} />} />
  <Route exact path = "/" render = {()=> apiDataLoaded ? <HomeLayout data = {data}/> : <div>Loading...</div>}/>
</Switch>
Поведение ключевого слова "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
2 134
2

Ответы 2

Удалите переключатель и используйте div внутри компонента ProductListLayout

ProductListLayout.js

const ProductListLayout = () => {
  return (
    <div>
      <div className = "product-list-item-card">
        <div className = "product-list-item-img"></div>
        <div className = "product-list-item-content">
          <div className = "product-list-item-overlay">
            <Link to = {`/products/${99999}`}>
              Click here
            </Link>
          </div>
          <h3>{name}</h3>
        </div>
      </div>
      <Route exact path = {`/products/:product_id`} render = {()=> <div>Product Page</div>}/>
    </div>
  );
}

Нажмите здесь, чтобы узнать больше

вам нужно изменить только позицию на ваших текущих маршрутах ...

<Switch>
 <Route path = "/:id" key = {1} render = {(props)=> <ProductListLayout 
   {...props} />} />
 <Route exact path = "/"  key = {1} render = {()=> apiDataLoaded ? 
   <HomeLayout data= . 
   {data}/> : <div>Loading...</div>}/>
</Switch>

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