这个想法是能够做到:
{this.state.list.map((item, key) => <MyComponent {item, key} />)}
你会怎么想?
我倾向于说不。 我们已经讨论了很多关于使用不同语法的内容,并且我们正在尝试将其保持在尽可能少的程度。 添加{...spread}
已经很重要了。
抄送@sebmarkbage
我们尝试将语法讨论保留在: https ://github.com/facebook/jsx 这样我们就可以让更广泛的团队为这种语法做出贡献,使其值得为语言增加额外的权重。
我认为<Foo {item} />
、 <Foo {...item} />
和<Foo item />
之间的区别可能太令人困惑了。 最后两个已经支持。
不过我喜欢你的想法。 如果你对此有强烈的感觉,你应该在https://github.com/facebook/jsx打开一个问题
https://github.com/facebook/jsx/pull/118
^ 此处讨论的对象表达式语法提案。
我认为这之间的区别
, 和 可能太混乱了。
混乱可能是相对的。 <Foo item />
不是很有用,因为它总是评估为 {item: true}。 事后看来,它感觉非常有限,但我可以从它的 html 基因中理解它的行为。 我个人还没有发现它有多大用处。
{item}
是{item: item}
的简写。 {...item}
是扁平化/浅拷贝/传播到新对象的简写。
一旦有人了解 jsx 转换为h(name: string | Component, props: {[name]: any}, ...children)
。 ObjectExpression 自然而然地落入其中。
令人困惑的是,不支持<Foo {x} />
但支持<Foo {...x} />
。 解决方法是
<Foo {...{x}} />
这更令人困惑。