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

React条件渲染Row开闭标签报错 如何按每3项分组包裹Col组件

问题根因

你之前的代码报错核心原因是JSX不支持单独渲染未闭合的零散标签:

  • JSX本质是React.createElement的语法糖,编译阶段会被转换为标准JS函数调用,要求所有标签必须是完整、闭合的结构
  • 你尝试条件输出单独的<Row>开标签或</Row>闭标签,相当于写了半个无法被解析的函数参数,自然会触发Unexpected token语法错误
  • 后续的三元写法逻辑也有问题:两个分支分别只写了Row的一半,开标签和闭标签不在同一个JSX节点树内,解析器依然会识别为未闭合标签。
最优实现方案

不要在单次遍历里拆分Row标签,先把原数组按每3个元素为一组做切片,再分层渲染:外层遍历分组渲染完整的<Row>,内层遍历每组内的元素渲染<Col>,完全符合JSX语法要求,可读性也更高。

{
  // 按每3个元素一组生成二维分组数组
  Array.from(
    { length: Math.ceil(companyConfiguration.length / 3) },
    (_, groupIdx) => {
      // 截取当前分组对应的元素
      const currentGroup = companyConfiguration.slice(
        groupIdx * 3,
        groupIdx * 3 + 3
      )
      return (
        <Row key={groupIdx}>
          {currentGroup.map((item, colIdx) => {
            const itemIndex = groupIdx * 3 + colIdx
            return (
              <Col key={itemIndex}>
                <FormComponent
                  field={item}
                  onChange={handleChange}
                  currentItem={{}}
                />
              </Col>
            )
          })}
        </Row>
      )
    }
  )
}

这个写法会自动处理元素总数不是3的倍数的场景:最后一组不足3个元素时,也会被正确包裹在Row组件内,不会出现标签不闭合的问题。

注意:不要用拼接HTML字符串的思路写JSX,所有JSX节点必须是完整自洽的结构,零散的开/闭标签永远无法通过语法校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:06:32