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

React中如何将组件作为Props传递?组件传参显示为字符串怎么解决?

在React中传递组件作为Props的正确方式

这个问题我碰到过好几次了,其实核心是要区分清楚传递组件类型和已渲染的React元素两种场景,先给你拆解下:

为什么你的组件显示成字符串?

大概率是你错误地把JSX代码用引号包裹成了字符串,比如写成:

// 错误写法!会变成字符串
const customSelect = "<ReactSuperSelect placeholder='Nothing Selected' ... />"

这种写法会让React把它当成普通文本渲染,而不是组件。必须用JSX语法(不带引号,直接写<组件名 />)来创建React元素。


解决方案1:传递已渲染的React元素(直接传成品)

如果你已经写好了完整的ReactSuperSelect配置,只想让子组件直接渲染它,那就把整个JSX元素作为props传递:

// 父组件
import ReactSuperSelect from './ReactSuperSelect';

class ParentComponent extends React.Component {
  handlerExample = (selectedValues) => {
    // 你的处理逻辑
    console.log(selectedValues);
  }

  render() {
    // 直接用JSX创建元素,赋值给变量
    const mySuperSelect = (
      <ReactSuperSelect 
        placeholder="Nothing Selected" 
        clearSearchOnSelection={true} 
        deselectOnSelectedOptionClick={true} 
        dataSource={testData} 
        multiple={true} 
        onChange={this.handlerExample} 
        keepOpenOnSelection={true} 
        searchable={true} 
      />
    );

    // 把元素作为props传给子组件
    return <ChildComponent customSelect={mySuperSelect} />;
  }
}

// 子组件:直接渲染接收到的元素
function ChildComponent({ customSelect }) {
  // 不需要额外处理,直接把customSelect放到JSX里就行
  return <div className="select-container">{customSelect}</div>;
}

解决方案2:传递组件类型(让子组件灵活控制)

如果你希望子组件能自定义ReactSuperSelect的部分props,那就把组件本身作为props传递(注意变量名首字母要大写,React会把首字母大写的变量识别为组件):

// 父组件
import ReactSuperSelect from './ReactSuperSelect';

class ParentComponent extends React.Component {
  handlerExample = (selectedValues) => {
    console.log(selectedValues);
  }

  render() {
    // 把组件本身作为props传递
    return (
      <ChildComponent 
        SelectComponent={ReactSuperSelect} 
        selectProps={{
          placeholder: "Nothing Selected",
          clearSearchOnSelection: true,
          deselectOnSelectedOptionClick: true,
          dataSource: testData,
          multiple: true,
          onChange: this.handlerExample,
          keepOpenOnSelection: true,
          searchable: true
        }}
      />
    );
  }
}

// 子组件:使用接收到的组件类型,并传入props
function ChildComponent({ SelectComponent, selectProps }) {
  // 像使用普通组件一样渲染SelectComponent,把props传进去
  return <SelectComponent {...selectProps} />;
}

关键注意事项

  • 传递组件类型时,变量名必须首字母大写,否则React会把它当成普通HTML标签处理,导致报错。
  • 不要用引号包裹JSX代码,那会变成字符串,必须直接写JSX语法创建React元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:08