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

React动态渲染Row与Col时key报错及奇数字段宽度异常问题

问题1 :key属性报错原因及解决

你只给了字段项的div加了key,但每次满行时插入的<div className="w-100"></div>没有添加唯一key,React遍历columns数组渲染时就会检测到缺少key的子元素,抛出警告。
给这个换行用的div补唯一key即可,比如用key={wrap_${idx}}。

问题2:奇数个字段最后一列占满整行的解决

你可以先计算需要补的空占位列数量:
计算公式:需要补充的空列数 = (每行列数 - 现有字段总数 % 每行列数) % 每行列数
如果现有字段总数刚好是每行列数的倍数,计算出来的补位数量为0,不需要额外补列;如果有余数,就补对应数量的空col-sm节点,保证每行的列数一致,所有输入框宽度统一。


修改后完整代码

export const RenderDetailRow = props => {
  const columns = [];
  const perRowCount = props.display[0].number;
  const contentTotal = props.content.length;
  // 计算需要补的空列数
  const emptyColCount = (perRowCount - contentTotal % perRowCount) % perRowCount;

  props.content.forEach((content, idx) => {
    columns.push(
      <div className="col-sm py-3" key={`item_${idx}`}>
        <b>{content.name + ': '}</b>
        <Input type="text" name={content.name} id={content.id} readOnly value={content.value} />
      </div>
    );

    if ((idx + 1) % perRowCount === 0) {
      // 给换行元素补key
      columns.push(<div className="w-100" key={`wrap_${idx}`}></div>);
    }
  });

  // 补空列
  for (let i = 0; i < emptyColCount; i++) {
    columns.push(<div className="col-sm py-3" key={`empty_${i}`}></div>);
  }

  return (
    <div className="row" style={{ margin: 30 }}>
      {columns}
    </div>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:57:04