【问题标题】:reactjs - valid React element (or null) must be returnedreactjs - 必须返回有效的 React 元素(或 null)
【发布时间】:2017-06-13 10:19:25
【问题描述】:

我有以下简单的代码:

var data = [{ email: "bob@gmail.com" },{ email: "toto@gmail.com" }];
var User = React.createClass({
render: function ()
{
    return
    (
        <li>
            {this.props.email}
        </li>
    );
}});

var UserList = React.createClass({        
render: function ()
{            
    var userNodes = this.props.data.map(function (user)
    {
        console.log(user.email);
        return
        (
            <User email={user.email} ></User>
        );
    });            
    return
    (
        <ul>{userNodes}</ul>
    );
}});


ReactDOM.render(<UserList data={data} />, document.getElementById('root'));

我得到了这个错误:

“必须返回一个有效的 React 元素(或 null)。您可能返回了未定义、数组或其他一些无效对象。”

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    这里,问题出在这一行。

    return
    (
        <li>
            {this.props.email}
        </li>
    );
    

    您已将起始括号放在下一行,因此当您的代码转换为纯 javascript 代码时,它将看起来像这样。

    render: function () {
        return; // A semicolon has been inserted.
        (React.createElement("li", null, this.props.email)); // unreachable code
    }
    

    您可以看到 Javascript 在解释您的代码时插入了一个分号,因此渲染函数没有返回任何值,您会收到此错误。

    为避免这种情况,您需要将起始括号放在 return 语句之后,以便 Javascript 在找到匹配的结束括号之前不会插入分号。像这样,

    return (
         <li>
             {this.props.email}
         </li>
    );
    

    现在,如果您查看生成的代码,它将看起来像这样

    render: function () {
        return (React.createElement("li", null, this.props.email));
    }
    

    另外,改变

    return
    (
       <ul>{userNodes}</ul>
    );
    

    return (
        <ul>{userNodes}</ul>
    );
    

    这里是工作小提琴。 JSFiddle

    我也修复了警告,

    数组或迭代器中的每个子元素都应该有一个唯一的“key”道具。

    通过在您的 User 组件中传递密钥。

    【讨论】:

    • 感谢它工作正常。我不知道大括号,我永远不会找到:-)
    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多