我想在不相关时动态隐藏项目.
这应该仅适用于“taglevel”高于1的标签.
例如,如果我点击“书籍”,它应该只显示“冒险”和“经典”.它将隐藏标签“重磅炸弹”,因为没有“书”属于“重磅炸弹”.
我以为我可以通过映射布尔值来做到这一点.您只需传递要显示的类别列表,而不是传递关卡和所有类别,然后在PhotoGallery中为每个级别提供该列表
我愿意这样做.
我把代码放在这个codepen中:
http://codepen.io/yarnball/pen/GjwxQq
以下是我获取标记级别的示例:
var PhotoGalleryLevel = React.createClass({
render: function () {
var getCategoriesForLevel = this.props.displayedCategories.some(function (tag) {
return tag.taglevel === this.props.level;
}.bind(this));
/* Write method here that takes the level as an argument and returns the filtered list?*/
/*displayedCategories={this.state.getCategoriesForLevel(1)}
displayedCategories={this.getCategoriesForLevel(1)}
*/
var filteredTags = this.props.tags.filter(function (tag) {
return tag.taglevel === this.props.level;
}.bind(this));
var disabled = this.props.displayedCategories.some(function (tag) {
return tag.taglevel === this.props.level;
}.bind(this));
return (
<div>
{filteredTags.map(function (tag, index){
return <PhotoGalleryButton key={index} tag={tag} selectTag={this.props.selectTag} disabled={disabled} />;
}.bind(this))}
</div>
);
}
});
EG的JSON数据:
"title": "Into the Wild",
"tag": [
{
"name": "Movie",
"taglevel": 1,
"id": 1
},
{
"name": "Adventure",
"taglevel": 2,
"id": 30
},
{
"name": "Classic",
"taglevel": 1,
"id": 2
}
],
"info": []
}
最佳答案 施耐德在这里:
http://codepen.io/anon/pen/EgOqwj?editors=0010
我们的想法是每次点击标签时都会生成新的uniqueCategories:
this.setState({
uniqueCategories: this.getUniqueCategories(PHOTODATA, newCategories),
displayedCategories: newCategories,
});
现在你有getUniqueCategories函数,我添加了这个:
(!display.length || !displayFiltered.length ||
displayFiltered
.some(function(t) {
return arr.filter(function(tc) {
return tc.taglevel === t.taglevel;
})
.some(function(tc) {
return t.id === tc.id;
});
}))
它不干净,但我已经使用过滤器和一些功能跟随你的模式