参考答案:
可以使用JavaScript的typeof运算符和React的Component类来进行判断。
下面是一个示例的判断方法:
1// 判断是否为 Class 组件 2function isClassComponent(component) { 3 return ( 4 typeof component === 'function' && 5 !!component.prototype?.isReactComponent 6 ); 7} 8 9// 判断是否为 Function 组件(是函数、但不是 Class 组件) 10function isFunctionComponent(component) { 11 return ( 12 typeof component === 'function' && 13 !component.prototype?.isReactComponent 14 ); 15} 16 17// 示例用法 18const MyComponent = () => <div>Hello, I'm a function component!</div>; 19const MyClassComponent = class extends React.Component { 20 render() { 21 return <div>Hello, I'm a class component!</div>; 22 } 23}; 24 25console.log(isClassComponent(MyComponent)); // false 26console.log(isClassComponent(MyClassComponent)); // true 27console.log(isFunctionComponent(MyComponent)); // true 28console.log(isFunctionComponent(MyClassComponent)); // false
上面定义了isClassComponent和isFunctionComponent两个函数,前者用typeof运算符判断是否为函数类型、再通过component.prototype.isReactComponent确定是否为 Class 组件,后者是它的取反。
注意 component.prototype 后面的可选链 ?. 不能省略:箭头函数没有 prototype 属性,React.memo / React.forwardRef 包装后的组件也不是普通函数,直接写 component.prototype.isReactComponent 会抛出 TypeError: Cannot read properties of undefined (reading 'isReactComponent')。
另外,Class 组件的 isReactComponent 是从 React.Component.prototype 继承来的,所以要用属性读取(会沿原型链查找)或 in 运算符,不能用 hasOwnProperty 判断。
最近更新时间:2026-10-26

题库维护不易,您的支持就是我们最大的动力!