Dictionary 在React中遍历不可变映射的键

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。”

通过Immutable.js映射对象处理迭代的最佳实践是什么?这项工作:

{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()
回调的参数中对其进行分解


编辑我现在明白了,您只是在索要密钥。在这种情况下,如果您想使用ImmutableJS
map()
keys()
如果您想使用ES6
map(),请使用
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()
,它不仅笨重而且性能可能更低。感谢您的输入