【发布时间】:2019-03-08 02:33:37
【问题描述】:
我正在尝试从辅助方法返回多个 React 元素。我可以简单地通过移动一些代码来解决它,但我想知道是否有更清洁的方法来解决它。我有一个返回 render 方法的一部分的方法,并且该函数需要返回一个 React 元素和一些文本。通过一个例子更清楚:
class Foo extends React.Component {
_renderAuthor() {
if (!this.props.author) {
return null;
}
return [
' by ',
<a href={getAuthorUrl(this.props.author)}>{this.props.author}</a>,
]; // Triggers warning: Each child in an array or iterator should have a unique "key" prop.
render() {
return (
<div>
{this.props.title}
{this._renderAuthor()}
</div>
);
}
}
我知道render 方法必须准确返回 1 个 React 元素。使用这样的辅助方法会触发警告,而修复警告(通过添加键)会使代码过于复杂。有没有一种干净的方法可以在不触发警告的情况下执行此操作?
编辑:
另一个用例:
render() {
return (
<div>
{user
? <h2>{user.name}</h2>
<p>{user.info}</p>
: <p>User not found</p>}
</div>
);
}
编辑 2:
事实证明这是不可能的,我在这里写了大约 2 个解决方法:https://www.wptutor.io/web/js/react-multiple-elements-without-wrapper
【问题讨论】:
-
什么样的警告?
-
"数组或迭代器中的每个子元素都应该有一个唯一的 "key" 属性。"向文本节点添加键是不可能的。即使可以,当我试图返回 2 个固定元素时,添加键似乎也很尴尬。
-
当你在 React 中动态插入额外的元素时,它会寻找 key prop,所以当你渲染你的链接时这样做:
<a key = {'prefix-'+random_string_generator()} href={getAuthorUrl(this.props.author)}>{this.props.author}</a> -
是的,但我正在寻找一种不需要这样做的方法。
-
FWIW,他们正在努力为此添加官方支持:github.com/facebook/react/issues/2127
标签: javascript reactjs