React遞歸生成導(dǎo)航樹

經(jīng)歷三天從坑里爬出來之后的總結(jié)

首先要構(gòu)造一個(gè)虛擬DOM

不要構(gòu)造標(biāo)簽字符串?。?!不要自定義容器!??!

代碼貼上來以備以后參考

function datengTest(){
    var dataTest = arguments[0];
    function getPath(data){
        return data.fullpath.substring(0,data.fullpath.length - data.name.length);
    }
    var size = dataTest.length;
    //最頂層目錄參考值
    //  var temp = data.fullpath.substring(0,data.fullpath.length - data.name.length);
    var path_cankao = getPath(dataTest[0]);
    //存放子數(shù)組起始位置
    var indexs = new Array();
    var result = new Array();
    var start = 0, end =0;
    console.log("參考路徑:" + path_cankao);
    
    for (var i=1; i< size;i++){
        var currentPath = getPath(dataTest[i]);
        if (currentPath == path_cankao){
            end = i - 1;
            var mymap = new Map();
            mymap.start = start;
            mymap.end = end;
            indexs.push(mymap);
            start = i;
            end = i;
        }
        if ((i == size - 1)){
            var mymap = new Map();
            mymap.start = start;
            mymap.end = i;
            indexs.push(mymap); 
        }
    }
    if (indexs.length == 0){
        var mymap = new Map();
        mymap.start = start;
        mymap.end = end;
        indexs.push(mymap);
    }
    for (var i = 0; i<indexs.length; i++){
        result.push(dataTest.slice(indexs[i].start,indexs[i].end + 1));
    }

    var commentNodes = result.map(function(data) {
        var data2 = data.slice(0,data.length);
        if (data.length > 1){
            data2.shift();
        }
        console.log("data2");
        console.log(data2);
                
        
        if(data[0].isServiceUnit == 0 && data.length > 1) {
            setAncestorKeys(data[0].id,data[0].pid);
//          var currentId = data[0].id;
//          var Pid = data[0].pid;
//          while(map[currentId] != null){
//              map[currentId].map(function(data){
//                  map[data[0].id].push(data);
//              })
//              currentId = 
//          }
            console.log("setId")
            console.log(map)
            var temp = datengTest(data2);
            console.log("temp")
            console.log(temp)
            var realElement = temp.commentNodes;
            return (
                <SubMenu key={data[0].id} title={<span><Icon type="setting" /><span>{data[0].name}</span></span>}>
                    {realElement}
                </SubMenu>
            );
        }
        else if(data[0].isServiceUnit == 1 && data.length == 1) {
            return (
                <Menu.Item key={data[0].id}>{data[0].name}</Menu.Item>
            );
        }
        else if(data[0].isServiceUnit == 0 && data.length == 1){
            setAncestorKeys(data[0].id,data[0].pid);
            console.log("setId")
            console.log(map)
            return (
                <SubMenu key={data[0].id} title={<span><Icon type="setting" /><span>{data[0].name}</span></span>}>
                </SubMenu>
            );
        }
    });
    console.log("commentNodes")
    console.log(commentNodes)
    return (
        {commentNodes}
    );
}

然后再去渲染就行了,根據(jù)json不同的結(jié)構(gòu)選擇不同的遞歸算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評論 25 709
  • 參考文章:深度剖析:如何實(shí)現(xiàn)一個(gè)Virtual DOM 算法 作者:戴嘉華React中一個(gè)沒人能解釋清楚的問題——...
    waka閱讀 6,139評論 0 21
  • 最近在閱讀這本Nicholas C.Zakas(javascript高級程序設(shè)計(jì)作者)寫的最佳實(shí)踐、性能優(yōu)化類的書...
    undefinedR閱讀 2,234評論 0 30
  • 有逗友問阿逗,怎么保存qq表情,然后倒入pr使用。今天就解答下好了,因?yàn)橹鞍⒍阂沧鲞^,所以分享下經(jīng)驗(yàn)。打開qq聊...
    阿逗的一條魚閱讀 5,929評論 0 8
  • @(讀書筆記)[匯編語言,計(jì)算機(jī)] 基礎(chǔ)知識 為什么要有匯編語言 CPU——電平脈沖(高低平)——二進(jìn)制數(shù)字——機(jī)...
    c3f53297fc45閱讀 322評論 0 0

友情鏈接更多精彩內(nèi)容