Reactjs 如何最好地将Immutable.JS列表发送到无状态React组件中?
我正在使用Redux、Immutable.JS和React。我想将一个Immutable.JS列表传递到我的无状态React组件中。该组件映射整个列表,并为列表中的每个项目呈现一个子项 例如:Reactjs 如何最好地将Immutable.JS列表发送到无状态React组件中?,reactjs,redux,immutable.js,Reactjs,Redux,Immutable.js,我正在使用Redux、Immutable.JS和React。我想将一个Immutable.JS列表传递到我的无状态React组件中。该组件映射整个列表,并为列表中的每个项目呈现一个子项 例如: function Cats(props) { function Cat(p) { return <li key={p.id}>p.name</li>; } return <ul>{props.cats.map(Cat)</ul>; }
function Cats(props) {
function Cat(p) {
return <li key={p.id}>p.name</li>;
}
return <ul>{props.cats.map(Cat)</ul>;
}
功能猫(道具){
功能Cat(p){
返回p.name ;
}
return{props.cats.map(Cat)
;
}
{p.id}
部分中断,因为props.cats
是一个不可变的.JS映射列表,所以我必须更新React组件,改为说{p.get('id')}
我可以这样做,但是有没有更好的方法让无状态React组件在不知道它是不可变的.JS列表的情况下使用列表?这种用法违反了Redux+Immutable.JS+React最佳实践中的最佳实践,“在任何地方都使用不可变的.JS,除了你的哑组件”
我确信其他人已经解决了这个问题,我不想重新发明轮子。你没有错。
如果使用ImmutableJs,您应该做的是p.get('id')
另一种方法类似于props.cats.map(elem=>)
或者IMHOP不那么优雅props.cats.map(elem=>elem.toJs()).map(Cat)
,但这只是做同一件事的不同方式
希望它对你有所帮助,可以与你的痛苦联系起来,我在这里记录了这一点- 对于Redux 您可以使用
mapStateToProps
将不可变项转换为普通JS(state.toJSON()
)。因此哑(不喜欢该术语)组件应该从您的状态的实际结构中抽象出来
否则
这是一个需要在州库和视图之间进行抽象的问题。在某种程度上,我能够隔离这一问题的一种方法是使用(镜头)[如果镜头看起来太复杂,可以制作get([key path],source)
方法,并将其以道具形式发送到组件,然后使用它获取值。这至少提供了一些抽象