我不明白我在做错了什么。我正在使用Immutable.js
&我的应用中React
。我正在调用Immutable.js的filter
函数来根据if
条件和&amp ;;来优化集合。返回React组件的数组。
它实际上是返回&#s; svgTemplateState'而不是React组件集合。
let getUpdatedTem = ( renderType, svgTemplateState ) => {
switch( renderType ){
case( "Template Selection" ):
return( svgTemplateState.filter(( templateType ) => {
if( templateType.get( "templateNo" ) > -1 ){
let temType = templateType.get( "type" );
return(
<TemplatePath
temData = { templateType }
key = { temType } />
);
}
}));
case( "Preview" ):
...
答案 0 :(得分:3)
不可变过滤器应返回一个布尔值,指示您是否希望模板成为要返回的集合的一部分。在您的情况下,您将返回一个React组件。
你正在迭代svgTemplateState
,这似乎是一张地图(我并不完全清楚它是什么)。您应该迭代的是模板集合,并检查集合中每个模板上的模板编号。你有一些(简化的)像:
let newCollection = templatesCollection.filter( template => return template.get( "id" ) > -1);
答案 1 :(得分:0)
您想要找到符合条件的第一个项目吗?喜欢。findEntry()?
答案 2 :(得分:0)
return( svgTemplateState.filter(( templateType ) => {
if( templateType.get( "templateNo" ) > -1 ){
let temType = templateType.get( "type" );
return(
<TemplatePath
temData = { templateType }
key = { temType } />
);
}
}));
假设svgTemplateState是一个数组,请将上面代码中的“filter”方法替换为“map”。如果svgTemplateState是一个带有pair的对象,那么使用for ... in来迭代svgTemplateState,检查条件并将组件推送到一个临时对象,你可以在循环之后返回。