Dictionary 在React中遍历不可变映射的键
通过Immutable.js映射对象处理迭代的最佳实践是什么?这项工作:Dictionary 在React中遍历不可变映射的键,dictionary,reactjs,immutability,Dictionary,Reactjs,Immutability,通过Immutable.js映射对象处理迭代的最佳实践是什么?这项工作: {stocks.map((stock,key)=>{ return ( <h3>{key}</h3> ) })} {stocks.map((stock,key)=>{ 返回({key}) })} 但是在控制台中给出了警告“warning.js:45 warning:将地图作为子元素使用还不完全受支持。这是一项实验性功能,可能会被删除。请将其转换为键控元素的序列/iterable。”
{stocks.map((stock,key)=>{
return ( <h3>{key}</h3> )
})}
{stocks.map((stock,key)=>{
返回({key})
})}
但是在控制台中给出了警告“warning.js:45 warning:将地图作为子元素使用还不完全受支持。这是一项实验性功能,可能会被删除。请将其转换为键控元素的序列/iterable。”
这一点以前已经讨论过了,这个链接提出了一些策略,但对我来说似乎有些笨拙。比如:
posts.entrySeq().map(o =>
<Post value={o[1]} key={o[0]} />
)
posts.entrySeq().map(o=>
)
工作,但笨重的感觉。有更自然的方法吗?为什么不stock.keys()
?当它返回一个ES6迭代器时,您需要将其强制转换为一个数组,以便它在较旧的JS版本中工作:array.from(stock.keys())
let zoo=Immutable.fromJS({'dog':1,'cat':2})
zoo.keys().map((名称,索引)=>。自从你提出这个问题以来,一个更好的解决方案已经发布在你提到的github问题上。@vinnymac建议:
posts.entrySeq().map( ([key, value]) =>
<Post key={key} value={value} />
)
posts.entrySeq().map(([key,value])=>
)
这很好,因为entrySeq()
返回一系列键/值元组,然后可以在.map()
回调的参数中对其进行分解
编辑我现在明白了,您只是在索要密钥。在这种情况下,如果您想使用ImmutableJSmap()
或keys()
如果您想使用ES6map(),请使用keys()
使用Immutable Map的reduce方法是一种更直接的方法。因为react需要一个数组,所以设置空数组的初始值并将jsx推入其中可以解决问题。同样适用于Immutable List
{
stocks.reduce((jsxArray, stock, index) => {
jsxArray.push(
<h3 key={index}>{index}</h3>,
)
return jsxArray;
}, [])
}
{
股票.reduce((jsxArray,股票,指数)=>{
jsxArray.push(
{index},
)
返回jsxArray;
}, [])
}
我最近遇到了同样的问题,最后也使用了entrySeq()
。我认为唯一的替代方法是使用toJS()
,它不仅笨重而且性能可能更低。感谢您的输入