我有以下简单的代码:
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)。您可能已返回未定义、数组或其他无效对象。"
这里,问题就在这一行。
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在解释代码时插入了分号,因此渲染函数不会返回任何值,因此会出现此错误。
为了避免这种情况,您需要将起始括号放在返回语句之后,这样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>
);
这里是工作小提琴。JSFIDLE
我还修正了警告,
数组或迭代器中的每个子级都应该有一个唯一的“键”属性。
通过在用户
组件中传递密钥。
问题内容: 我只是ReactJS的新手,所以有一个问题。我解决不了 似乎一切都很好,但是控制台仍然让我: 必须返回有效的React元素(或null)。您可能返回了undefined,数组或其他无效对象。 这是我的代码: 宠物小精灵 感谢帮助! 问题答案: 问题是您有多个语句,因此需要将其括在内部。请参见以下代码片段。另外,必须与其他项目在同一行上,否则它将被视为仅基本不返回任何内容的行。
问题内容: 我是React的新手,我想知道这里的标准是什么。 想象一下,我有一个像这样的反应路由器: 现在我想删除如果设置为的两条路线,因此一种理智的做法如下所示: 但是有两条路线,React返回错误: 表达式必须具有一个父元素。 我不想在这里使用多个ifs。React首选的处理方式是什么? 问题答案: 将它们放在一个数组中(也分配键): 使用最新的React版本,您也可以这样尝试 :
我带着一个关于硒的问题来到这里。在我的测试中,我需要删除web应用程序中的一些项目,然后我想验证项目列表是否为空。我知道这看起来很琐碎,但我有一些小问题。这就是我要检查我的项目列表是否为空的方式: 简单和工作,但...慢,因为含蓄等待。 由于事实上当我删除项目,然后是0和Selenium总是等待10秒前findElements()返回0大小。 为了避免这10秒钟的等待,我有一个变通方法,在断言之前
我试图弄清楚如何从angular 6/typescript应用程序向firebase数据库编写事务。 下面是我使用的一个工作示例作为指导: 我确定的关键部分如下: 1)创建一个数组来保存事务:const transactions=[]; 2)开始事务:返回db.runtransactions(function(transactions){… 3)使用事务:transaction.set(newPh
我正在添加ReCAPTCHA到一个(引导哲基尔)网站,有多个联系人表单。页脚有一个弹出模式,偶尔有一个“立即联系我们”部分,还有几个页面上有一个“请求更多关于____的信息”。 由于我在一个页面上有多个联系人表单,所以我需要显式呈现每个recaptcha。代码如下: 在我的JavaScript中: 在页脚中(包含在所有页面中) (并在页脚底部) 这在一个有两个单独联系人表单的页面上工作得很好(即我
我有两个组件。 彩虹。jsx 彩虹列表.jsx 雨弓.jsx 是具有数组和雨弓列表.jsx 的主要组件,我用它来用 map() 以 li 格式显示所有彩虹色。 我在控制台日志中得到错误消息ShowRainBow。状态:必须设置为对象或null 我的代码 彩虹. jsx RainBowList.jsx