Здравствуйте, уважаемые. Вопрос из базовых, но у меня вызвал затруднения. Есть древовидная структура. Я в компоненте либо добавляю, либо редактирую узлы. После обновления/создания элемента во внешнем компоненте, он приходит у родителю и там пытается обновить переменную класса componentData. После этого, по идее, обновления должны прорисоваться в родителе. Но этого не происходит.
Обновление входящими данными:
getChangedItemToList(incomeItem ){
if (incomeItem) {
let oldItem = Util.getTreeItemById(incomeItem.id, this.componentData);
if (oldItem) { // Апдейт
console.log("before", oldItem, this.componentData);
oldItem = incomeItem;
console.log("after", oldItem, this.componentData);
} else { // Вставка нового узла
if(!incomeItem.parent_id) { // Рубрика
this.componentData = [incomeItem, ...this.componentData];
} else { // Обычный элемент
const itemParent = Util.getTreeItemById(incomeItem.parent_id, this.componentData);
if(!itemParent.children) itemParent.children = [];
itemParent.children.unshift(incomeItem);
}
}
}
}
А вот функция поиска узла дерева:
export class Util {
static getTreeItemById(id: string, tree: IUniversalTreeNode[]): IUniversalTreeNode{
for (let count = 0; count < tree.length; count++) {
if(tree[count].id == id){
return tree[count];
} else if(tree[count].children && tree[count].children.length > 0){
const res = this.getTreeItemById(id, tree[count].children);
if(res !== null) return res;
}
}
return null;
}
}
По идее getTreeItemById возвращает ссылку на элемент дерева. И если я этот элемент обновлю, то, в моем понимании, поскольку это ссылка, должен обновиться и объект, который содержит узел дерева, который я нашел (oldItem = incomeItem; ). Но если oldItem обновился, то this.componentData не изменился. Подскажите пожалуйста в чем ошибка.