javascript - 简单的 react 过滤

标签 javascript json reactjs

我正在尝试在 React 中使用基本过滤。我所有的“标签”都有“标签级别”。

  • 我希望第一行显示“taglevel”为 1 的所有 tag.name。

  • 我希望第二行显示“taglevel”为 2 或更高的所有 tag.name。

但是,我无法让它根据 json 中的“嵌套”内容进行过滤。

我可以获取“标题”并进行过滤,但我想过滤嵌套的 json 内容 tag.name。

我已将其放在代码笔中。

http://codepen.io/yarnball/pen/GqbyWr?editors=1010

没有成功,我现在尝试了以下方法:

我尝试使用以下方法进行过滤:

var LevelFilter = React.createClass({

    render: function(){
        return this.props.tags.filter(tag => tag.taglevel === this.props.targetLevel).map(tag => <a onClick={this.props.onClick}>{tag.name}</a>);
    }
});

然后尝试将其包含在我的返回中:

render: function(){
        var buttonClass = this.state.active ? 'active' : '';
        var titleToSelect = this.selecttitle;
        var getUniqueCategories=[];
        PHOTODATA.forEach(function(el){
            if(getUniqueCategories.indexOf(el.title) === -1 ) getUniqueCategories.push(el.title);
        })

        return (
            <div className="overlay-photogallery">
                <div className="filter-panel"><b>Tags with taglevel 1 only (not title!)</b>
                    {
                        getUniqueCategories.map(function(el,i){
                            var boundClick = titleToSelect.bind(null,el);
                            return <LevelFilter onClick={onClick} targetLevel={1}/>
                        })

                    }  

这是我的 json 示例:

    "title": "Into the Wild",
    "tag": [
        {
            "name": "Movie",
            "taglevel": 1,
            "id": 1
        },
        {
            "name": "Adventure",
            "taglevel": 2,
            "id": 30
        },
        {
            "name": "Book",
            "taglevel": 1,
            "id": 2
        }
    ],
    "info": []
}

最佳答案

可能是这样的:

var Level1filter = React.createClass({

    render: function(){
        return this.props.tags.filter(tag => tag.taglevel === 1).map(tag => <a onClick={this.props.onClick}>{tag.name}</a>);
    }
});

var Level2filter = React.createClass({

    render: function(){
        return this.props.tags.filter(tag => tag.taglevel === 2).map(tag => <a onClick={this.props.onClick}>{tag.name}</a>);
    }
});

现在,也许可以做得更好:

var LevelFilter = React.createClass({

    render: function(){
        return this.props.tags.filter(tag => tag.taglevel === this.props.targetLevel).map(tag => <a onClick={this.props.onClick}>{tag.name}</a>);
    }
});

//and use it like this
<LevelFilter onClick={onClick} targetLevel={1}/>
<LevelFilter onClick={onClick} targetLevel={2}/>

箭头函数,如果您不熟悉的话:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions

关于javascript - 简单的 react 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39147884/

相关文章:

javascript - 使用 .offset() 使用 jQuery 缩放图像

json - Karate 在状态为 201 的 POST 请求后不显示响应

javascript - TypeError : this. state.contracts.map 不是函数 React

javascript - 通过 es6 脚本创建 Web 表单

Javascript 控件如 iOS 索引 TableView ?

javascript - 在 javascript 中使用正则表达式匹配并返回 [] 中包含的所有字符串

javascript - 查看音频标签并滚动文本

android - ionic 使用 $cordovaFile 读取本地 json 文件

java - 从我的 ListView 中添加 ItemOnClick,使用 JSON 从 MYSQL 中获取数据

javascript - Ag 网格阻止访问 React 状态变量的当前值