“任何使用键控对象都应该被包装在React.addons.createFragment(object)中,然后再作为一个子对象传递”

我收到以下警告:

任何对键控对象的使用都应该在作为子对象传递之前包装在React.addons.createFragment(object)中。

什么原因导致这个错误,我该如何解决?

如果您尝试将JavaScript对象(而不是JSX元素或string)插入某些JSX,则会发生此错误。

例如,这是一个小小的情况,会产生警告:

import React from 'react'; window.React = React; import ReactDOM from 'react-dom'; var content = {foo: 'bar'}; ReactDOM.render(<div>{content}</div>, document.getElementById('some-element')); 

尽pipe错误消息build议使用createFragment来解决这个问题,但是更可能的情况是,您将某个variables插入某个JSX中,而您认为这是一个string或JSX元素,但实际上是其他types的对象。

由于消息没有告诉你JSX中的哪个expression式导致了错误,所以你必须通过其他方式来追踪它 – 例如,通过查看产生错误的提交的源代码控制中的diff,或者一次只消除一半的JSX元素,直到find导致错误消失的元素。

也有这个问题,但是我的事业稍有不同。

我试图写出一个像这样的对象内的值:

 var FooObject = React.createClass({ render: function() { var object_to_write = {'foo': 'bar'}; return ( <div> I expect this text to say <b>bar</b> and it says <b>{object_to_write}</b> </div> ); } }); 

反应给了我的keyed object should be wrapped错误… … –

但是,当然,我的错误是由于我没有指定我想使用的值(在这个例子中, foo ),而且它试图渲染整个对象。

另一个案例:

 // Bad - this causes the warning this.state = { content: {} } render() { return ( <div> {this.state.content} </div> ) } 

不要渲染对象,而是渲染string。

 // Good - no complaints this.state = { content: "" } render() { return ( <div> {this.state.content} </div> ) } 

此警告的另一个可能的原因:传入React元素的对象而不是数组。

 // Bad - this causes the warning var items = { 23 : <Todo name="some things">, 24 : <Todo name="other things"> }; return <ul>items</ul> 

相反,你应该只传递元素数组,像这样 –

 // Good - no complaints var items = [ <Todo name="some things">, <Todo name="other things"> ]; return <ul>items</ul>