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

React中简化向静态函数组件传递Props的写法

简洁传递组件属性的几种方案

针对你目前的代码,有几种简洁的方式可以减少属性传递的冗余:

1. 利用扩展运算符合并传递属性

可以直接把item.name单独传递,再用扩展运算符...把item.meta里的所有属性一次性传给Row组件,避免逐个手动写属性:

public table(data: any[] | ""){
  return (
    <table>
      {data !== "" && data.map((item) => (
        <Row name={item.name} {...item.meta} />
      ))}
    </table>
  )
}

2. 提前解构数据再传递

在map回调里先解构item的属性,让代码更清晰,再传递给Row组件:

public table(data: any[] | ""){
  return (
    <table>
      {data !== "" && data.map(({ name, meta }) => (
        <Row name={name} {...meta} />
      ))}
    </table>
  )
}

3. 优化TypeScript类型定义(可选但推荐)

原来的props: any和data: any[]不够严谨,建议定义明确的类型,既提升代码提示也避免类型错误:

// 定义Row组件的属性类型
interface RowProps {
  name: string;
  x: string;
  y: string;
  memo: string;
}

// 定义数据项的类型
interface TableItem {
  name: string;
  meta: RowProps;
}

// 修改table方法的参数类型
public table(data: TableItem[] | ""){
  return (
    <table>
      {data !== "" && data.map(({ name, meta }) => (
        <Row name={name} {...meta} />
      ))}
    </table>
  )
}

// Row组件使用明确的类型
function Row(props: RowProps){
  return (
    <tr>
      <td>{props.name}</td>
      <td>{props.x}</td>
      <td>{props.y}</td>
      <td>{props.memo}</td>
    </tr>
  )
}

另外注意你原来的Row组件里,<td>props.name</td>这种写法是直接输出字符串,应该改成<td>{props.name}</td>才能正确渲染属性值,上面的代码已经修正了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:30:25