“任何使用键控对象都应该被包装在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>