Javascript 在实例化React组件后是否可以添加键属性?

Javascript 在实例化React组件后是否可以添加键属性?,javascript,reactjs,Javascript,Reactjs,这个例子是人为的,但它得到了我需要做的 假设我有这样一个现有组件: var c1 = React.DOM.p( {} ); var container = React.DOM.div( {}, [ c1, c2 ] ); 稍后我需要在数组上下文中使用此组件,如下所示: var c1 = React.DOM.p( {} ); var container = React.DOM.div( {}, [ c1, c2 ] ); 这将创建一个div,其子组件为c1和c2,但React抱怨传递给di

这个例子是人为的,但它得到了我需要做的

假设我有这样一个现有组件:

var c1 = React.DOM.p( {} );
var container = React.DOM.div( {}, [ c1, c2 ] );
稍后我需要在数组上下文中使用此组件,如下所示:

var c1 = React.DOM.p( {} );
var container = React.DOM.div( {}, [ c1, c2 ] );
这将创建一个div,其子组件为
c1
c2
,但React抱怨传递给div函数的数组中的项缺少键属性

在将密钥传递到容器之前,是否可以先将密钥添加到现有的
c1
组件?我确实意识到它可以在第一次创建
c1
时设置,但我需要在之后进行设置

我正在查看React方法和插件,没有看到任何解决此问题的方法。

啊哈,在重新阅读之后,我注意到这一行:

也可以通过传递对象为子对象设置关键帧。对象键将用作每个值的键

因此,我可以做如下操作,而不是在上面传递数组:

var p = React.DOM.p( {} ),
    contentObject = {
        component1: p,
        component2: somethingElse
    },
    container = React.DOM.div( {}, contentObject );

react将对象参数解释为这些组件的键。

如果您只想抑制警告/使其明确,可以使用实用程序功能:

function keyByIndex(xs){
  var obj = {};
  for (var i=0; i<xs.length; i++) obj["k"+i] = xs[i];
  return obj;
}


还要记住,这些是等效的:

React.DOM.div({}, c1, c2)
React.DOM.div({}, {a: c1, b: c2})
React.DOM.div({}, keyByIndex([c1, c2]))