这就是我的代码为什么它显示ID未定义?我希望在销售组件中访问每本书的标题和ID,但ID未定义.如何在销售组件中显示ID的值?谢谢你的帮助! App.js

  <Route path="books" element={<Dashboard />} />
  <Route path="books/:booktitle" element={<BookDetails />} />
  <Route path="books/:booktitle/sale/:id" element={<SaleStore />} />

Dashbaord:

 {books.map((book) => (
                  <div className="col" key={book.id}>
                    <div className="card h-100" >
                      <div className="card-img-top pb-5 mb-5">
                      </div>
                      <div className="card-body">
                        <Link to={`/books/${encodeURIComponent(book.title)}`}>
                          <button type="submit" className="btn custome-btn purple-active-ghost w-100">
                            {book.title}
                          </button>
                        </Link>
// rest of code

Detail:

  const { booktitle, id } = useParams();
  console.log("book Title:", booktitle);
  console.log("book Id:", id);
                     <Link to={`/books/${encodeURIComponent(booktitle)}/sale/${id}`}>
                          <button type="submit" className="btn custome-btn purple-active-ghost w-100">
                              go to sale
                          </button>
                        </Link>

Sale:

  const { booktitle, id } = useParams();
  console.log("book Title:", booktitle);
  console.log("book Id:",id);
  
        <p>{booktitle}</p> // 
      <p>{id}</p> // undefiend

推荐答案

BookDetails组件似乎具有未定义的id参数,并将其传递到用于导航到Sales页面的链接.

<Route
  path="books/:booktitle" // <-- no id param!
  element={<BookDetails />}
/>
const { booktitle, id } = useParams();
console.log("book Title:", booktitle);
console.log("book Id:", id); // <-- undefined

...

<Link
  to={`/books/${encodeURIComponent(booktitle)}/sale/${id}`} // <-- undefined id!
>
  ...
</Link>

我建议一种路由模式,其中图书ID在路由路径中的前面使用.

例如:

<Route path="books">
  <Route index element={<Dashboard />} />         // "/books"
  <Route path=":title/:id">
    <Route index element={<BookDetails />} />.    // "/books/:title/:id"
    <Route path="sale" element={<SaleStore />} /> // "/books/:title/:id/sale"
  </Route>
</Route>

更新仪表板以链接到标题为100 id的详细页.

{books.map((book) => (
  <div className="col" key={book.id}>
    <div className="card h-100" >
      <div className="card-img-top pb-5 mb-5">
    </div>
    <div className="card-body">
      <Link to={`${book.title}/${book.id}`}> // "/books/:title/:id"
        <button type="submit" className="btn custome-btn purple-active-ghost w-100">
          {book.title}
        </button>
      </Link>
    </div>
  </div>
)}

现在将在Detail组件中定义titleid.指向销售页面的链接.

const { title, id } = useParams();
console.log("book Title:", title);
console.log("book Id:", id);

...

<Link to="sale"> // "/books/:title/:id/sale"
  <button type="submit" className="btn custome-btn purple-active-ghost w-100">
    go to sale
  </button>
</Link>

现在,图书titleid也应该在销售组件中可用.

Javascript相关问答推荐

无法将nPM simplex-noise包导入在JS项目中工作

如何修复内容安全策略指令脚本-SRC自身错误?

ReactJS中的material UI自动完成类别

vscode扩展-webView Panel按钮不起任何作用

togglePopover()不打开但不关闭原生HTML popover'

使用javascript将Plotly Expandable Sparkline转换为HighCharter Plot在bslib卡中

浮动Div的淡出模糊效果

google docs boldText直到按行执行应用脚本错误

保持物品顺序的可变大小物品分配到平衡组的算法

变量的值在Reaction组件中的Try-Catch语句之外丢失

IF语句的计算结果与实际情况相反

当用户点击保存按钮时,如何实现任务的更改?

Vaadin定制组件-保持对javascrip变量的访问

Phaserjs-创建带有层纹理的精灵层以自定义外观

使用父标签中的Find函数查找元素

在D3条形图中对具有相同X值的多条记录进行分组

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

如果NetSuite中为空,则限制筛选

TypeORM QueryBuilder限制联接到一条记录

需要从对象生成列表