我有以下简单代码:
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)。您可能返回了未定义,数组或其他无效对象。”
在这里,问题出在这一行。
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在找到匹配的结束括号之前不会插入分号。像这样,
现在,如果您查看生成的代码,它将看起来像这样
render: function () { return (React.createElement("li", null, this.props.email)); }
另外,改变
return ( <ul>{userNodes}</ul> );
至
这是工作中的小提琴。JSFiddle
我还修复了警告,
数组或迭代器中的每个子代都应具有唯一的“键”道具。
通过在您的User组件中传递密钥。
User