当前位置: 首页 > 面试题库 >

错误“ JSX元素类型'...'没有任何构造或调用签名”是什么意思?

孟意致
2023-03-14
问题内容

我写了一些代码:

function renderGreeting(Elem: React.Component<any, any>) {
    return <span>Hello, <Elem />!</span>;
}

我收到一个错误:

JSX元素类型Elem没有任何构造或调用签名

这是什么意思?


问题答案:

这是 构造函数实例 之间的混淆。

请记住,在React中编写组件时:

class Greeter extends React.Component<any, any> {
    render() {
        return <div>Hello, {this.props.whoToGreet}</div>;
    }
}

您可以通过以下方式使用它:

return <Greeter whoToGreet='world' />;

不会 以这种方式使用它:

let Greet = new Greeter();
return <Greet whoToGreet='world' />;

在第一个示例中,我们传递了组件Greeter构造函数 。这是正确的用法。在第二个例子中,我们绕过一个 实例
Greeter。这是不正确的,并且将在运行时失败,并显示诸如“对象不是函数”之类的错误。

此代码的问题

function renderGreeting(Elem: React.Component<any, any>) {
    return <span>Hello, <Elem />!</span>;
}

是它的预期的 情况下React.Component。你想要什么一个函数, 构造函数React.Component

function renderGreeting(Elem: new() => React.Component<any, any>) {
    return <span>Hello, <Elem />!</span>;
}

或类似的:

function renderGreeting(Elem: typeof React.Component) {
    return <span>Hello, <Elem />!</span>;
}


 类似资料:
  • 我正在使用一个使用React框架的JavaScript遗留项目。我们定义了一些React组件,我想在一个完全不同的TypeScript React项目中重新使用。 JS React组件在controls.jsx文件中定义,如下所示: 在我的TypeScript React项目中,我试图这样使用它: 错误消息显示: JSX元素类型MyComponent不是JSX元素的构造函数。类型'MyCompon

  • 在这段代码中: 为什么我们需要?那是类型铸造,对吗? 假设赋值语句右侧的是大写字母。我想我们在做Unicode的加法和减法。 这是我正在阅读的Java书籍中的片段: 对char执行算术时,首先将其转换为在Unicode系统中表示它的int。从变量c中减去“A”本质上是问“c中的字符在大写字母中有多远?”然后,添加'a'将产生int,该int与小写字母字符代码序列的距离相同。之所以需要转换为char

  • 问题内容: 我用Javassist创建了一个没有实际方法的构造函数 当我试图拿出这堂课的签名时 我懂了 我很困惑“ V”是什么意思?我期望任何一个公共Echo(); 或类似的东西 问题答案: JVM使用一种紧凑的方式来存储方法签名,其中的构造函数被认为是特例。 例如: 表示不带参数的方法 表示它什么也不返回 该计划的其他部分是: -字节 -字符 -双 -浮动 -整数 - 长 -短 -无效 -布尔值

  • 更新代码,错误显示内部类Mobile中存在非法静态删除。mymobile修饰符的static只允许在常量变量偏差中使用,第75行,public static void main(String[]args){,这是什么意思?? 我的代码: 任何答案或回复和帮助都将不胜感激,因为我完全迷路了!

  • 我正在创建一个组件,我希望元素类型是可配置的。 所以容器元素可以是上面的defaultProps中的元素,也可以是组件。 我不能得到的验证,我已经尝试了这个: 但它不能正确验证。 提供给的值的prop无效,

  • 我正在学习react,并试图找到在JSX内部循环的方法,这时我在react JSX内部遇到了这个stackoverflow链接-循环。这个问题的作者说,我意识到并理解为什么这不是有效的JSX,因为JSX映射到函数调用,我不明白他的意思。