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

如何实现可复用HTML表格?解决不同onClick参数传递问题

复用支持不同点击参数的表格组件方案

我需要复用同一个表格组件,两个场景下点击按钮的回调需要传递不同参数——一个传user.id执行删除操作,另一个传整个user对象执行添加操作,怎么实现组件复用?

以下是两种实用的解决思路:

方案1:父组件封装回调,自主决定传递参数

这种方式无需修改表格组件本身,让父组件在传递onClickHandler时,提前封装好要传递的参数。表格组件只负责触发回调,不用关心具体传什么内容。

父组件调用示例

添加用户场景:

{usersData &&
  <Table
    data={usersData}
    onClickHandler={(user) => addUserHandler(user)} // 传递完整user对象
    buttonText="Add"
  />
}

删除用户场景:

{usersData &&
  <Table
    data={usersData}
    onClickHandler={(user) => deleteUserHandler(user.id)} // 仅传递user.id
    buttonText="Delete"
  />
}

表格组件无需修改

原表格组件的按钮点击逻辑保持不变:

<Button onClick={() => onClickHandler(user)}>
  {buttonText}
</Button>

优点:表格组件逻辑极简,完全由父组件控制回调参数,灵活性拉满,适合参数规则多变的场景。

方案2:给表格组件添加参数提取器Props

如果希望表格组件承担部分参数处理逻辑,可以新增一个paramExtractor Props,用来指定从user中提取什么值传给回调,默认传递整个user对象。

修改后的表格组件

const Table = ({ data, onClickHandler, buttonText, paramExtractor = (user) => user }) => (
  <Container>
    <StyledTable>
      <THead>
        <TR>
          <TH>ID</TH>
          <TH>NAME</TH>
          <TH>PHONE</TH>
        </TR>
      </THead>
      <TBody>
        {data?.map((user) => (
          <TR key={user.id} >
            <TD>{user.id}</TD>
            <TD>{user.name}</TD>
            <TD>{user.phone}</TD>
            <TD>
              <Button
                onClick={() => onClickHandler(paramExtractor(user))} // 使用提取器获取参数
              >
                {buttonText}
              </Button>
            </TD>
          </TR>
        ))}
      </TBody>
    </StyledTable>
  </Container>
)

export default Table;

父组件调用示例

添加用户场景(默认传整个user,可省略paramExtractor):

{usersData &&
  <Table
    data={usersData}
    onClickHandler={addUserHandler}
    buttonText="Add"
  />
}

删除用户场景(指定提取user.id):

{usersData &&
  <Table
    data={usersData}
    onClickHandler={deleteUserHandler}
    buttonText="Delete"
    paramExtractor={(user) => user.id}
  />
}

优点:父组件代码更简洁,参数提取规则集中在表格组件的Props配置中,适合参数规则相对固定的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:15:36