使用过滤器函数返回React组件 - 代码审查

时间:2016-06-03 19:44:36

标签: javascript reactjs redux immutable.js

我不明白我在做错了什么。我正在使用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" ):
...

3 个答案:

答案 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,检查条件并将组件推送到一个临时对象,你可以在循环之后返回。