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

如何在React组件的return中使用模板字符串渲染自定义组件?

解决React模板字符串渲染组件显示[Object Object]的问题

你碰到的[Object Object]问题其实很典型——React组件(比如<IconButton />)本质是一个React元素对象,当你把它塞进模板字符串时,JavaScript会自动调用它的toString()方法,结果就变成了[Object Object]。模板字符串只适合拼接普通HTML字符串,完全不适合渲染React组件,这也是为什么你查资料大多只看到渲染HTML标签的原因。

正确解决方案:直接使用JSX渲染

React的核心就是用JSX描述UI,这才是渲染组件的标准方式。我们来重构你的代码,改成React推荐的写法:

import IconButton from '@abc/components'

export const ColumnsOfBryntum = ({ recordType, value }) => {
  switch (recordType) {
    case 'kpi':
      return (
        <div>
          <div className="channel-info">
            {/* React中用className替代HTML的class属性 */}
            <div className="channel-name">{value}</div>
            {/* 直接嵌套React组件即可,不需要模板字符串拼接 */}
            <IconButton icon="plus" />
          </div>
        </div>
      );

    case 'channelGroup':
      return (
        {/* 把需要添加的类名直接写在根元素的className里,避免直接操作DOM */}
        <div className="channel-group-row">
          <div className="channel-info">
            <div className="channel-name">{value}</div>
            <IconButton icon="edit" />
          </div>
        </div>
      );

    // 务必加上default分支,避免无返回值的情况
    default:
      return null;
  }
}

为什么这样写能解决问题?

  1. JSX原生支持组件嵌套:JSX是React的语法糖,它会被编译成React元素对象,React能直接识别并渲染这些组件,不需要额外的字符串转换。
  2. 避免DOM操作:你原代码里的row.addCls('channel-group-row')属于直接操作DOM,这在React的声明式模型里是不推荐的。我们直接把类名写在根元素的className上,让React去管理DOM。
  3. 规范的组件写法:函数组件应该直接接收props并返回JSX,原代码里的render() =>写法是错误的,那是类组件的写法逻辑。

特殊场景:如果非要用字符串拼接(不推荐)

如果因为某些特殊需求,你必须把组件转成字符串嵌入模板,那可以用ReactDOMServer.renderToString()把React组件转换成HTML字符串:

import ReactDOMServer from 'react-dom/server';
import IconButton from '@abc/components'

// 在模板字符串中这样使用
const kpiHtml = `<div>
  <div class="channel-info">
    <div class="channel-name">${value}</div>
    ${ReactDOMServer.renderToString(<IconButton icon="plus" />)}
  </div>
</div>`;

但要注意:这种方式渲染出来的是静态HTML,React不会为这些元素绑定事件或进行后续的状态管理,所以除非万不得已,否则强烈建议用第一种JSX的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:20