必须返回React有效的ReactComponent。您可能已返回undefined,数组或其他一些无效对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必须返回React有效的ReactComponent。您可能已返回undefined,数组或其他一些无效对象相关的知识,希望对你有一定的参考价值。

我正在构建这个简单的反应应用程序,我遇到了这个错误,我试图调试,但没有快乐。我相信我一定错过了一些可能非常明显的重要事项。

*Error: VideoDetail.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.*

index.js

import React, {
    Component
} from 'react';
import ReactDOM from 'react-dom';
import YTSearch from 'youtube-api-search';
import VideoDetail from './components/video_details';
const API_KEY = 'XXXXXXXXXXXXXXXXXXXXXXX';

class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            videos: []
        };
        YTSearch({
            key: API_KEY,
            term: 'cute cats'
        }, (videos) => {
            this.setState({
                videos
            }); 
        });
    }

    render() {
        return (
          <div >
            <VideoDetail video = {this.state.videos[0]}/> 
          </div>
        );
    }

}

ReactDOM.render( < App / > , document.querySelector('.container'));

video_details.js

import React from 'react';

const VideoDetail = ({ video }) => {
    if (!video) {
        return (
            <div>
                Loading...
            </div>
        );
    }
    const videoId = video.id.videoId;
    const url = `https://www.youtube.com/embed/${videoId}`;
    return
    (
        <div className='video-details col-md-8'>
            <div className='embed-responsive embed-responsive-16by9'>
                <iframe className='embed-responsive-item' src={url}> </iframe>
                <div className='details'>
                    <div> {video.snippet.title} </div>
                    <div> {video.snippet.description} </div>
                </div>
            </div>
        </div>

    );
}
module.exports = VideoDetail;

我一定是错过了导致这个错误的东西。我错过了什么?

答案

我发现了问题所在。在video_details.js文件中,我有第二次返回,它前面没有任何内容。所以它应该返回(相反。在没有任何东西的情况下将返回留在单行上会导致错误。

另一答案

您忘记导入VideoDetail组件。

由于您已经在VideoDetail.js中使用ES6

export default VideoDetail;

然后导入它:

import VideoDetail from "./VideoDetail";
另一答案

问题出在你的VideoDetail反应组件上。您的return语句的括号位于下一行。因此,你最终返回undefined。哪个不是有效的反应组件,因此您会收到错误。

从某种意义上说,你的反应组件最终看起来像这样。

function VideoDetail() {
  return
  <div></div>;
}

这不是有效的javascript return语句。

如果您希望返回确认您的下面的代码,括号必须从同一行说明,包含下面的代码。

function VideoDetail() {
  return (
    <div></div>
);
}

以上是关于必须返回React有效的ReactComponent。您可能已返回undefined,数组或其他一些无效对象的主要内容,如果未能解决你的问题,请参考以下文章

渲染方法没有返回有效的 React 元素

React:组件和数组的条件渲染

如何使用 grpc-web 构建 react-redux 应用程序?

React Firebase - 未捕获的异常signInWithEmailAndPassword,电子邮件必须是有效字符串

google-map-react 标记聚类问题

视图函数未返回有效响应。返回类型必须是字符串,dict