我有一个关于产品的页面.我的问题是,当我试图点击一个产品时,URL会发生变化,但屏幕上什么都没有显示.它仍然显示呈现所有产品的组件.

我试了几种不同的方法,但似乎都不管用

<Route path="store" element={<Store />}>
  <Route path="protein" element={<Products />} />
  <Route path="protein/*" element={<SingleProduct />} />
</Route>

我还try 了:

<Route path="store" element={<Store />}>
  <Route path="protein" element={<Products />}>
    <Route path="*" element={<SingleProduct />} />
  </Route>
</Route>

还包括:

<Route path="/store/protein/*" element={<SingleProduct />} />

所以这不是一个子元素的路由.

但这也没有奏效.你知道我做错了什么吗?

编辑:这是我的store 组件:

import React from "react";
import SidePanel from "../components/storeComponents/SidePanel";
import Products from "../components/storeComponents/Products";
import "./Store.css";

const Store = () => {
  return (
    <div className="store-page">
      <SidePanel />
      <Products />
    </div>
  );
};

export default Store;

推荐答案

当被路由的组件正在呈现105路由时,使用尾随路径splats,例如,如果SingleProduct呈现另一个RoutesRoute个组件的集合,则尾随"*"也允许匹配这些路由.不过,您正在try 使用106条路由.

Store组件只是直接呈现Products组件.相反,它应该为嵌套的路由呈现Outlet组件,以呈现其内容.

import { Outlet } from 'react-router-dom';

const Store = () => {
  return (
    <div className="store-page">
      <SidePanel />
      <Outlet />
    </div>
  );
};

您还将在同一路由路径上渲染ProductsSingleProduct.您可能希望在具有动态路径段的子路由路径上渲染SingleProduct,例如类似于"protein/:productId".

<Route path="store" element={<Store />}>
  <Route path="protein" element={<Products />} />
  <Route path="protein/:productId" element={<SingleProduct />} />
</Route>

确保Products组件正确链接到有效的"/store/protein/:productId"路径.例如:

从根"/"开始的绝对路径:

<Link to={`/store/protein/${product.id}`}>
  {product.title}
</Link>

产品页"/store/protein"的相对路径:

<Link to={product.id}> // <-- no leading slash "/" character
  {product.title}
</Link>

Javascript相关问答推荐

使用typeof运算符获取对象值类型-接收字符串而不是数组

使用redux-toolet DelivercThunks刷新访问令牌

一次仅播放一个音频

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

从实时数据库(Firebase)上的子类别读取数据

在React中获取数据后,如何避免不必要的组件闪现1秒?

被CSS优先级所迷惑

在JavaScript中声明自定义内置元素不起作用

虚拟滚动实现使向下滚动可滚动到末尾

使用Promise.All并发解决时,每个promise 的线性时间增加?

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

Webpack在导入前混淆文件名

如何在Node.js中排除导出的JS文件

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

使用API调用的VUE 3键盘输入同步问题

从异步操作返回对象

如何向内部有文本输入字段的HTML表添加行?

在点击链接后重定向至url之前暂停

在Reaction Native中,ScrolltoIndex在结束时不一致地返回到索引0