Я работаю над проектом на сайте электронной коммерции, и в настоящее время у меня настроены правильные маршруты для домашней страницы на "/"
и для страницы со списком продуктов на "/: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>
Удалите переключатель и используйте 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>