【问题标题】:Make a Tree view from JSON data using React JS使用 React JS 从 JSON 数据创建树视图
【发布时间】:2016-11-02 23:20:15
【问题描述】:

首先,我对 React JS 非常陌生。所以我正在写这个问题。我正在尝试这个三天。 我必须做的,列出一个类别,比如-

Category1
->Sub-Category1
->Sub-Category2
Categroy2
Category3
.
.
.
CategoryN

我有这个 json 数据来制作列表

[
    {
        Id: 1,
        Name: "Category1",
        ParentId: 0,
    },
    {
        Id: 5,
        Name: "Sub-Category1",
        ParentId: 1,
    },
    {
        Id: 23,
        Name: "Sub-Category2",
        ParentId: 1,
    },
    {
        Id: 50,
        Name: "Category2",
        ParentId: 0,
    },
    {
        Id: 54,
        Name: "Category3",
        ParentId: 0,
    },
];

我尝试了很多开源示例,但是它们的 json 数据格式和我的不一样。所以这对我没有用。我已经建立了一些东西,但这与我的预期结果不同。这是我所做的 jsfiddle 链接。 https://jsfiddle.net/mrahman_cse/6wwan1fn/

注意:每个子类别都会归入一个依赖于“ParentId”的类别,如果任何一个有“ParentId”:0,那么它实际上是一个类别,而不是子类别。请查看 JSON

提前致谢。

【问题讨论】:

    标签: javascript json reactjs jsx


    【解决方案1】:

    您可以使用此代码jsfiddle

    此示例允许添加新的嵌套类别,并进行嵌套搜索。

    带有 cmets 的代码:

    var SearchExample = React.createClass({
        getInitialState: function() {
            return {
                searchString: ''
            };
        },
        handleChange: function(e) {
            this.setState({
                searchString: e.target.value.trim().toLowerCase()
            });
        },
        isMatch(e,searchString){
            return e.Name.toLowerCase().match(searchString)
        },
        nestingSerch(e,searchString){
            //recursive searching nesting
            return this.isMatch(e,searchString) || (e.subcats.length && e.subcats.some(e=>this.nestingSerch(e,searchString)));
        },
        renderCat(cat){
            //recursive rendering
            return (
                <li key={cat.Id}> {cat.Name}
                    {(cat.subcats && cat.subcats.length) ? <ul>{cat.subcats.map(this.renderCat)}</ul>:""}
                </li>);
        },
        render() {
            let {items} = this.props;
            let {searchString} = this.state;
             //filtering cattegories
            if (searchString.length) {
                items = items.filter(e=>this.nestingSerch(e,searchString))
                console.log(items);
            };
            //nesting, adding to cattegories their subcatigories
            items.forEach(e=>e.subcats=items.filter(el=>el.ParentId==e.Id));
            //filter root categories
            items=items.filter(e=>e.ParentId==0);
            //filter root categories
            return (
                <div>
                    <input onChange={this.handleChange} placeholder="Type here" type="text" value={this.state.searchString}/>
                    <ul>{items.map(this.renderCat)}</ul>
                </div>
            );
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2017-01-10
      • 2022-09-22
      • 2019-12-23
      • 1970-01-01
      • 2017-04-17
      相关资源
      最近更新 更多