V4Fire / Client

V4Fire client core library
MIT License
22 stars 14 forks source link

Невалидное свойство `$root` у компонентов внутри async render #1294

Closed shining-mind closed 3 weeks ago

shining-mind commented 4 weeks ago

Возьмем ситуацию:

// b-component.ss
< b-button v-func = false
// p-root.ss
< . v-async-target
  += self.render({wait: 'async.idle.bind(async)'})
    < b-component

b-button будет иметь $root, который ссылается на detached root в рамках которого зарендерился асинхронный chunk, что не соответствует ожидаемому типу ComponentInterface

Ниже приведен пример такого "неправильного" рута

image

Сейчас эта проблема стреляет при попытке изменить количество remoteRootInstances на beforeUnmount https://github.com/V4Fire/Client/pull/1286/files#diff-174b05479005b64539c6214b349b72c19275ffcab2db0f5c76a29660d2535d8dR240

shining-mind commented 4 weeks ago

Fix https://github.com/V4Fire/Client/pull/1296

shining-mind commented 3 weeks ago

Исправлять эту "ошибку" нельзя, так как $root это внутреннее свойство Vue, на которое он полагается. У компонентов отрендеренных внутри async-render действительно другой $root, потому стоит использовать геттер r, чтобы обратиться к руту основого приложения.

Для этого мы расширим ComponentInterface