Правильный путь к глубокому клонированию рекурсивного объекта в React (нормализованное состояние) - PullRequest
0 голосов
/ 30 августа 2018

Я создаю приложение, в котором я заканчиваю с нормализованным состоянием. Затем он строит HTML на основе свойства content. Идея состоит в том, что разделы могут иметь дочерние элементы, которые ссылаются на другие элементы в elements.

this.state = {
        elements: {
                byId : {
                1: {
                    content: 'Section',
                    children: [2, 3]
                },
                2: {
                    content: 'Child section'
                },
                3: {
                    content: 'Child section',
                    children: [4]

                },
                4: {
                    content: '2nd level-child section'
                }
            }
        },
        content: [1]
    }

    clone() {
       ???
    };

Добавление, удаление довольно просто. Мне нужно иметь функциональность, чтобы клонировать элемент, и это дети. Так, например если я хотел бы клонировать 1-й раздел, он должен создать новые элементы и обновить все ids в новом разделе.

Каков наилучший способ достичь этого? Или эта структура не подойдет для такой работы?

Желаемое состояние при клонировании

this.state = {
    elements: {
        byId: {
            1: {
                content: 'Section',
                children: [2, 3]
            },
            2: {
                content: 'Child section'
            },
            3: {
                content: 'Child section',
                children: [4]

            },
            4: {
                content: '2nd level-child section'
            },

            // new elements
            5: {
                content: 'Section copy',
                children: [6, 7] // updated ids
            },
            6: {
                content: 'Child section copy'
            },
            7: {
                content: 'Child section copy',
                children: [8] //updated ids

            },
            8: {
                content: '2nd level-child section copy'
            },
        }
    },
    content: [1, 5] // updated content
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...