javascript - React Router v4 不使用/参数在路由中渲染组件

标签 javascript reactjs react-router react-router-v4

我正在一个电子商务网站上做一个项目,目前在 "/" 的主页和在 "/:id"的产品列表页面设置了正确的路由。我正在尝试为单个产品页面设置路由,但是,react-router 根本不呈现我的组件。

索引.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>

最佳答案

您只需要更改当前路线上的位置...

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

关于javascript - React Router v4 不使用/参数在路由中渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125035/

相关文章:

reactjs - JEST - 如何使用同一 __test__ 文件夹中的实用程序管理不同的测试文件

reactjs - react |将数据从父组件传递给子组件

javascript - React-Router - 在路由数组映射外使用 <Switch> 时出错

javascript - 如何为表中的删除行包含不同的警报?

Meteor js 中的 Javascript 对象持久性

node.js - 我应该在生产中使用 Nginx 来服务 React 吗?

reactjs - React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

javascript - AJAX 加载调用 javascript 函数的 PHP 页面

javascript - SAPUI5 在 Controller 中动态创建 ComboBox

javascript - 如何使用React前端和express后端从url获取参数?