You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React点击列表项添加至表格报错问题排查求助

问题描述

我有两个经映射渲染的列表项,点击绑定了onClick={(e) => handleCheckClick(ele)}的div时,希望将点击的项显示在表格中,但出现了错误。

相关代码

handleCheckClick函数

function handleCheckClick(ele) {
 if (trayItems?.length > 0) {
     settrayItems(
       trayItems.map((item) => {
         return { ...item, quantity: item.quantity + 1 };
       })
     );
   } else {
     settrayItems([...trayItems, ele]);
   }
 }

列表项映射渲染代码

<div>
{
    item && item.filter((person) => person.status == "0").map((ele) => {
        return (
            <div
                className="newmo-card"
                style={styles.innerbox}
                onClick={(e) => handleCheckClick(ele)}>
                {`${ele.item}`}
                <br />
                <span> {`${ele.total_price}`}</span>
            </div>

        );
    })
}
</div>
<Tray trayItems2={trayItems} trayItems1={trayPrice} /> 

表格组件代码

function Tray({ trayItems }) {
    return (
      <>
      <div className="foo">
        <table>
          {trayItems &&
                trayItems.map((ele, index) => {
                  return (
                    <tr key={index}>
                      <td>{ele.item}</td>
                      <td>{ele.price}</td>
                      <td>{ele.quantity}</td>
                    </tr>
         
        </table>
      </div>
    </>
  );
}

问题修正方案

1. 修复Props传递不匹配

父组件给Tray传递的是trayItems2,但子组件接收的是trayItems,导致表格拿不到数据。修改父组件的Tray调用:

<Tray trayItems={trayItems} />

2. 修正点击逻辑错误

当前逻辑会给所有项的quantity加1,而非针对点击的项。正确逻辑应该是判断点击项是否已存在,存在则更新数量,不存在则添加新项并初始化quantity:

function handleCheckClick(ele) {
  settrayItems(prevItems => {
    const existingItem = prevItems.find(item => item.item === ele.item);
    if (existingItem) {
      return prevItems.map(item => 
        item.item === ele.item 
          ? { ...item, quantity: item.quantity + 1 } 
          : item
      );
    } else {
      return [...prevItems, { ...ele, quantity: 1 }];
    }
  });
}

3. 统一数据字段名

列表项显示的是total_price,但表格用了price,字段不匹配。修改表格中的字段:

<td>{ele.total_price}</td>

4. 修复语法错误

表格组件的map函数未闭合,补上缺失的}):

function Tray({ trayItems }) {
    return (
      <>
      <div className="foo">
        <table>
          {trayItems &&
                trayItems.map((ele, index) => {
                  return (
                    <tr key={index}>
                      <td>{ele.item}</td>
                      <td>{ele.total_price}</td>
                      <td>{ele.quantity}</td>
                    </tr>
                  );
                })}
        </table>
      </div>
    </>
  );
}

内容的提问来源于stack exchange,提问作者vivek kn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:55:29