小编典典

reactjs-必须返回有效的React元素(或null)

reactjs

我有以下简单代码:

var data = [{ email: "[email protected]" },{ email: "[email protected]" }];
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)。您可能返回了未定义,数组或其他无效对象。”


阅读 351

收藏
2020-07-22

共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已插入分号,因此render函数没有返回任何值,并且您遇到此错误。

为避免这种情况,您需要在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

我还修复了警告,

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

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

2020-07-22