React js return 函数递归

React js return function recursive

您好,我正在尝试使用递归打印数据,这是函数:

function list({ data, tab }){

    if( !data || !data.length ){
        return null;
    }        

    return data.map( item => {
      <React.Fragment>
            <div className="row" key={item.id} >
                <div className="col-md-10">
                    { tab + item.name}
                </div>
                <div className="row col-md mx-auto">
                    <Link 
                        to={`/edit/${item.id}`} 
                        className="col-md px-0" 
                        title="Edit"
                    >
                        Edit
                    </Link>   
                    <button
                        className="col-md px-0"
                        onClick={ () => delete(item.id) }
                        title="Delete"
                    >
                      Delete>                                    
                    </button>   
                </div>
            </div>
            <list data={item.child} tab={tab+"\t"} />
      </React.Fragment>
    });
}

因此数据结构如下:

[
    {
     id: '0',
     name: 'name 1'
     parent: null,
     child:[{                    
            id: '4',
            name: 'name 4'
            parent: '0',
            child:[{
                    id: '3',
                    name: 'name 3'
                    parent: '4',
                    child:[{}]  
                }]                 
           },
           {                    
            id: '2',
            name: 'name 2'
            parent: '0',
            child:[{
                    id: '5',
                    name: 'name 5'
                    parent: '2',
                    child:[{}]  
                }]                 
           },
           {                    
            id: '6',
            name: 'name 6'
            parent: '0',
            child:[{}]                 
           }                           
        ]
    }
]

你可以看到这棵树是完全动态的,所以我可以使用递归来解决它,但是我遇到了一些问题,我只显示了“名称 1”,而不是所有数据,我该怎么办怎么做才能得到它???

这样的事情怎么样...

const rows = []
const data = [
    {
        id: '0',
        name: 'name 1',
        parent: null,
        child: [{
            id: '4',
            name: 'name 4',
            parent: '0',
            child: [{
                id: '3',
                name: 'name 3',
                parent: '4',
                child: [{}]
            }]
        },
        {
            id: '2',
            name: 'name 2',
            parent: '0',
            child: [{
                id: '5',
                name: 'name 5',
                parent: '2',
                child: [{}]
            }]
        },
        {
            id: '6',
            name: 'name 6',
            parent: '0',
            child: [{}]
        }]
    }
]

const Row = (item, tab) => {
    return (
        <div className="row" key={item.id}>
            <div className="col-md-10">
                {tab + item.name}
            </div>
            <div className="row col-md mx-auto">
                <Link 
                    to={`/edit/${item.id}`} 
                    className="col-md px-0" 
                    title="Edit"
                >
                    Edit
                </Link>
                <button
                    className="col-md px-0"
                    onClick={() => delete (item.id)}
                    title="Delete"
                >
                    Delete>
                </button>
            </div>
        </div>
    )
}

const print = (data, tab) => {
    data.forEach(item => {
        if (Object.keys(item).length === 0) {
            return
        }
        rows.push(Row(item, tab))

        if (item.child && item.child.length > 0) {
            print(item.child, tab + "\t")
        }
    })
}

print(data, '')
return rows