【问题标题】:React error "You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports"反应错误“您可能忘记从定义它的文件中导出组件,或者您可能混淆了默认和命名导入”
【发布时间】:2021-01-03 18:04:10
【问题描述】:

https://codesandbox.io/s/sparkling-paper-mxb9g?file=/src/index.tsx

我所有的进出口都很好。

元素类型无效:应为字符串(用于内置组件) 或类/函数(用于复合组件)但得到:未定义。你 可能忘记从定义它的文件中导出您的组件, 或者您可能混淆了默认导入和命名导入。

检查Search的渲染方法。

Search.tsx 渲染函数

    render = () => {
        return (
            <div className="wrapper">
                <div className='content'>
                    <SearchBox placeholder="Search" underlined={true} onChange={this.setQuery} onSearch={this.searchQuery}/>
                    <this.RenderDomains />
                    <this.RenderImages />
                </div>
            </div>
        )
    }

这个错误与这段代码有什么关系?

【问题讨论】:

  • 1) 您需要在问题本身中包含任何相关代码,而不是在场外。 2) &lt;this.RenderDomains /&gt; 不是呈现函数结果的有效方式。我强烈建议您阅读 JSX 上的 React 文档。
  • 当我不知道相关代码是什么时,您如何建议我这样做?另一方面,我可能会因为发布太多代码而被否决,因为我不知道。
  • "检查搜索的渲染方法。" - 这将是我对相关代码的建议。如果请求更多代码,那么您可以添加更多代码,但我认为至少尝试会得到更好的响应。照原样,它可能会以“需要调试细节”或类似的方式关闭。

标签: reactjs


【解决方案1】:

您收到错误的原因是您尝试在 Search 组件的 render 方法中渲染域和图像。

用户定义的组件must start with an uppercase letter。所以打电话&lt;this.RenderDomains /&gt; 是不允许的。您有几个选项可以解决此问题。

  1. 而不是尝试使用像&lt;this.RenderDomains /&gt; 这样的jsx 来渲染方法的结果,您应该调用该方法并将返回的值存储在一个变量中,然后渲染该变量或直接返回该方法的结果。下面的示例显示了这两个示例。
render = () => {
        const domains = this.RenderDomains();
        const images = this.RenderImages();
        return (
            <div className="wrapper">
                <div className='content'>
                    <SearchBox placeholder="Search" underlined={true} onChange={this.setQuery} onSearch={this.searchQuery}/>
                    {domains}
                    {this.renderImages()}
                </div>
            </div>
        )
    }
  1. 将方法(不是结果)分配给以大写字符开头的变量,然后像普通组件一样调用它。
render = () => {
        const RenderDomains = this.RenderDomains;
        const RenderImages = this.RenderImages;
        return (
            <div className="wrapper">
                <div className='content'>
                    <SearchBox placeholder="Search" underlined={true} onChange={this.setQuery} onSearch={this.searchQuery}/>
                    {<RenderDomains />}
                    {<RenderImages />}
                </div>
            </div>
        )
    }
  1. 不使用类的方法,而是将 RenderDomains 和 RenderImages 设为它们自己的组件。

【讨论】:

  • 你能解释一下这个错误是如何导致你得出这个结论的吗?编辑工作。为什么我不能使用 JSX?我的 create-react-app setup + typescript 没有发现这个问题,但是构建将失败并显示无用的消息。我只是抓住了这个,因为我试图把它放在 CodeSandBox 上,这为我指明了正确的方向。我怎样才能改变我的设置来解决这些问题?
  • @Raven 不幸的是,该错误对您遇到的问题没有多大帮助。我想通了,因为它说问题出在您的 Search 组件的渲染方法中,并且我注意到您正在尝试异常渲染组件。 -- 我刚刚更新了我的答案,以更好地反映代码的实际问题,并提供一些解决方案。
猜你喜欢
  • 2020-12-08
  • 2019-06-02
  • 1970-01-01
  • 2020-08-13
  • 2019-11-29
  • 1970-01-01
  • 2018-06-29
  • 2019-10-30
  • 1970-01-01
相关资源
最近更新 更多