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

如何将h1、h2等标签作为参数传入构建自定义大小的Header组件

自定义动态标题组件实现方案

你的原有写法不符合JSX语法规范,JSX不支持直接使用变量作为标签名拼接使用,你可以通过以下两种方式实现需求:

方式1:动态标签变量写法

将传入的标签名字符串赋值给大写开头的变量,JSX会自动识别为动态标签使用:

const Course =({course})=>{
  return(
    <div>
      <Header text="Web dev cirriculum" size="h1"/>
      <Header text={course.name} size="h2"/>
      <Content course ={course}/>
    </div>     
  )
}

const Header = ({text, size}) => {
  // 必须使用大写开头的变量存储标签名,JSX才会识别为动态标签
  const Tag = size;
  return <Tag>{text}</Tag>;
}

方式2:使用React.createElement API

你也可以直接调用React内置的createElement方法实现,第一个参数直接传入标签名字符串即可:

import { createElement } from 'react';

const Header = ({text, size}) => {
  return createElement(size, null, text);
}

优化建议

你可以添加参数校验,限制size只能传入合法的标题标签,避免非法参数报错:

import PropTypes from 'prop-types';

Header.propTypes = {
  text: PropTypes.string.isRequired,
  // 仅允许传入h1到h6的合法标题标签
  size: PropTypes.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']).isRequired
};

// 可设置默认标签级别
Header.defaultProps = {
  size: 'h2'
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:04