Показать сообщение отдельно
  #1 (permalink)  
Старый 13.12.2019, 18:33
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Не обновляется ссылочный объект
Здравствуйте, уважаемые. Вопрос из базовых, но у меня вызвал затруднения. Есть древовидная структура. Я в компоненте либо добавляю, либо редактирую узлы. После обновления/создания элемента во внешнем компоненте, он приходит у родителю и там пытается обновить переменную класса 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 не изменился. Подскажите пожалуйста в чем ошибка.
Ответить с цитированием