不能用作 JSX 组件。它的返回类型“void”不是有效的 JSX element.ts(2786)

Posted

技术标签:

【中文标题】不能用作 JSX 组件。它的返回类型“void”不是有效的 JSX element.ts(2786)【英文标题】:cannot be used as a JSX component. Its return type 'void' is not a valid JSX element.ts(2786) 【发布时间】:2021-12-14 01:37:19 【问题描述】:

我得到了这个代码:

    function searchData(searchWord: any) 
        if (originalData.length > 0) 
            if (searchWord !== "") 
                setDataList([...originalData.filter((svc: any) => 
                removeAccent(svc.name.toLowerCase())
                .includes(removeAccent(searchWord.toLowerCase()))),]);
             else 
                setDataList([...originalData]);
            
        
    
    return (
        <div>
            <Navbar currentUser=props.currentUser setCurrentUser=props.setCurrentUser />
            <div style= paddingTop: "80px", marginBottom: "3rem", minHeight: "90vh" >
                <div className="text-center header">
                    <h1 className="title">Tu agente de reserva personal</h1>
                    <h4 className="title">Consulta servicios y agenda citas en línea</h4>
                </div>
                <Row className="justify-content-center text-center mt-5">
                    <Col xs="11" sm="8" md="7" lg="6" xl="5">
                        <h1 className="title">Nuestros prestadores de servicios. </h1>
                        <FormControl onChange=e => searchData(e.target.value)/>                  
                    </Col>
                </Row>
                <CardList data=dataList></CardList>
            </div>
            <Footer />
        </div>
    )

它返回给我这个:

"'Navbar' 不能用作 JSX 组件。"

“它的返回类型'void'不是一个有效的JSX element.ts(2786)”

我不知道我做错了什么。

【问题讨论】:

在返回之前你有一个额外的支架。 【参考方案1】:

正如 Antonio 正确指出的那样,问题在于返回 JSX 之前的备用右括号。

这相当于返回 undefined,它对于 React 来说是无效的 JSX,因此是错误消息。

要找到这些问题,最好使用 Prettier 等自动格式化程序或按需触发 Autoformat 来自动格式化您的代码。以下是在 VSCode 中执行此操作的方法:

Cmd+Shift+P (MacOS) 或 Ctrl+Shift +P 打开命令框,然后输入“格式化文档”

或者使用直接快捷键Option/Alt+Shift+F

这假设 VSCode 找到了文件的正确语言(这通常是根据文件扩展名完成的)。

【讨论】:

以上是关于不能用作 JSX 组件。它的返回类型“void”不是有效的 JSX element.ts(2786)的主要内容,如果未能解决你的问题,请参考以下文章

Angular - JSX 和模板文字中的转义变量以将其用作参数

实验八——函数定义及调用总结

打字稿:未找到导出/JSX 元素类型没有任何构造或调用签名

Flutter:这个表达式的类型是 'void',所以它的值不能被使用

AppComponent中的ERROR不能用作条目组件

不能将void*类型的值分配到int类型实体?