Допустим у меня два компонента A и B, и A.render() = html`<${B}/><${B}/>`
.
Вопрос: каков алгоритм привязки дочерних экземпляров компонент к возвращаемому html-ом virtual DOM?
В частности:
-
Нарисовал пример и убедился, что при повторном вызове A.render(), используются ранее инстанциированные компоненты B. Даже если менять их атрибуты. Это позволяет предполагать, что в каждой компоненте кешируется список дочек как раз для такого случая.
-
Но если очередной вызов A.render() вдруг вернёт одну дочернюю компоненту вместо двух (т.е.
html`<${B}/>`
), у меня всё равно выводит две компоненты, иcomponentWillUnmount()
для второй компоненты не вызывается. И это смахивает на баг, отсюда и вопрос про алгоритм. -
Можно ли как-то явно (а не по индексу) привязать экземпляр к тегу? Конкретный юз-кейс: первый из двух – текущий, второй в состоянии «загружаюся я», и после завершения его загрузки я хочу их свопнуть: второй загруженный на место первого, а первый выкинуть до следующей загрузки. Пробовал подусунуть в h() первым аргументом экземпляр вместо имени класса – не пашет. С одной стороны, так и ожидалось, с другой – компонентная модель это ООП, а в ООП так работать с типами вместо экземпляров – моветон, антипаттерн и полная дичь.