reactjs - React Router嵌套路由在父路由内部渲染,如何单独渲染?

标签 reactjs react-router

我正在制作一个购物页面,并且展示了产品。每次用户点击产品时,路由器都应该呈现产品页面,其中包含产品的所有信息。

我的路线设置如下:

<BrowserRouter>
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/products" element={<Products />}>
        <Route path=":productId" element={<SelectedProduct />} />
      </Route>
    </Routes>
  </BrowserRouter>

<Products /> 的内部我有:

return (
        <div className="full-products-container">
            <div className="displayed-products-container">
                {productsToDisplay.map((product) => (
                    <Link
                        to={`/products/${product.id}`}
                        key={product.id}
                        className="product-box"
                    >
                        <img
                            src={product.image}
                            className="product-image-displayed"
                        />
                        <div className="product-name">{product.name}</div>
                        <div className="product-price">${formatNumber(product.price)}</div>
                    </Link>
                ))}
            </div>
            <Outlet />
        </div>
    );

现在,每次点击产品时,<SelectedProduct />组件在我的 <Products /> 内部渲染组件?

如何让每次点击产品时,<SelectedProduct />完全渲染?而且不在它的父级内部?

最佳答案

如果您希望 SelectedProduct 在其自己的页面上呈现,则应将其呈现为 "/products" 的同级路由,而不是作为嵌套子路由。

示例:

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/products" element={<Products />} />
    <Route path="/products/:productId" element={<SelectedProduct />} />
  </Routes>
</BrowserRouter>

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/products">
      <Route index element={<Products />} /> // "/products"
      <Route
        path=":productId"                    // "/products/:productId"
        element={<SelectedProduct />}
      />
    </Route>
  </Routes>
</BrowserRouter>

正在渲染的 Link 组件 Products 已经使用绝对路径,因此链接无需更改,但现在 Products 已不再使用t 渲染为布局路由,它不需要渲染 Outlet 组件。

return (
  <div className="full-products-container">
    <div className="displayed-products-container">
      {productsToDisplay.map((product) => (
        <Link
          to={`/products/${product.id}`}
          key={product.id}
          className="product-box"
        >
          <img
            src={product.image}
            className="product-image-displayed"
          />
          <div className="product-name">{product.name}</div>
          <div className="product-price">${formatNumber(product.price)}</div>
        </Link>
      ))}
    </div>
  </div>
);

关于reactjs - React Router嵌套路由在父路由内部渲染,如何单独渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74174833/

相关文章:

facebook - 在 ReactJS 应用程序中实现 Facebook 评论插件

javascript - react 悬念防止后备旋转器闪烁

javascript - 由子路由和在其之上渲染的页面驱动的react-router基础组件

javascript - ReactJS 服务器端渲染与热重载 (webpack-dev-server)

迁移 TypeScript 后,由 SASS 编译的 CSS 文件不会加载到 CRA 应用程序中

javascript - 如何检查一个数组中的某个项是否存在于另一个数组中?

javascript - 在 React 路由中将 Props 传递给组件

javascript - React 和 React Router,使用不同的 prop 渲染相同的元素两次会导致两个元素具有相同的 prop?

javascript - 在 React 中将 Props 传递给父组件

reactjs - React 中 Immutable.js 序列的循环计数错误