Safari中键上的Immutable.js映射
我在Safari中遇到了一个奇怪的问题,控制台中出现了这个错误- 警告:任何键控对象的使用都应该在作为子对象传递之前包装在React.addons.createFragment(对象)中 进一步看,我已经将问题隔离到不可变集合上的映射。下面是代码片段-Safari中键上的Immutable.js映射,safari,reactjs,immutable.js,Safari,Reactjs,Immutable.js,我在Safari中遇到了一个奇怪的问题,控制台中出现了这个错误- 警告:任何键控对象的使用都应该在作为子对象传递之前包装在React.addons.createFragment(对象)中 进一步看,我已经将问题隔离到不可变集合上的映射。下面是代码片段- var items = Immutable.fromJS([ {id: 1, val: "foo"}, {id: 2, val: "bar"}, {id: 3, val: "moo"}, {
var items = Immutable.fromJS([
{id: 1, val: "foo"},
{id: 2, val: "bar"},
{id: 3, val: "moo"},
{id: 4, val: "baz"}
]);
var tree = items.map(function(item, i) {
return <p key={i}>{item.get('val')}</p>
});
return (
<div className="tree-view">
{tree}
</div>
)
var items=Immutable.fromJS([
{id:1,val:“foo”},
{id:2,val:“bar”},
{id:3,val:“moo”},
{id:4,val:“baz”}
]);
var tree=items.map(函数(item,i){
返回{item.get('val')}
});
返回(
{tree}
)
呈现时,您可以看到正在以某种方式创建那些
元素,它们实际上是不可变列表对象的属性,即大小、容量、原点、级别等。这些span标记是错误的原因
知道为什么会这样吗?(我曾尝试在一个独立的JSbin中复制此问题,但不幸的是,我无法这样做)我无法找到此问题的原因,但是,我只需在app.js文件中导入Immutable即可解决此问题(即使它不需要)
这是相关的提交-我也有同样的问题。当我不调用
toJS()
但调用require('immutable')
时,我会收到关于片段的警告,但不会收到额外跨距的警告;当我调用toJS()
但不需要“immutable”时,我不会收到额外跨距和警告
在对React问题进行了一点挖掘之后,我发现了以下问题:
尽管它特别提到了iOS,但我在桌面Safari和移动Safari中也看到了同样的问题
解决方案是为Babel使用polyfill,这对我很有效
我必须在我的网页配置中添加polyfill作为条目,如下所示:
entry: ['babel/polyfill', './app/client.js']
现在在桌面和移动设备上对我有效。可能是因为
tree
是一个不可变的列表,您可以在最后第三行将{tree}
更改为{tree.toJS()}
。这些随机数(大小/来源/容量/级别)显示在我的HTML中。在生产中,这些问题会消失(在browserify/babelify/uglify之后)。你知道发生了什么事吗?谢谢不!我在dev和prod中都看到了这个问题,所以我只添加了require语句,从而修复了Safari中的问题。