169 похожих чатов

Как в динамических асинхронных компонентах дожидаться полного монтирования компонента? button @click="setComponent" component

:is="componentName"

components: {
'MyComponent' => import('./MyComponent')
}

setComponent(){
this.componentName = 'MyComponent'
// и вот тут я хочу вызвать метод компонета через ref, но компонент с тому времени не загрузился или не смонтировался
// помогает только this.nextTick
this.$refs.MyComponent.method()
}

32 ответов

21 просмотр

грязный подход сам по себе, дергать через реф

RusaXXX
вопрос не в этом

только nextTick - грязному подходу грязное решение

Denis Strokov
только nextTick - грязному подходу грязное решение

но лучше из компонента который монтируете, бросить событие и в родительском компоненте среагировать на него - так будет канонично хотябы

Andrey Mishagin
Почему?

потому, что $ref для индивидуальных случаев работы напрямую с dom елментами, а не для вызова методов из дочерних

Andrey Mishagin
Почему?

С асинхронными компонентами нарушается последовательность жизненного цикла ребенок - родитель. Когда родитель смаунтился - ребенок мог еще даже не начать. По этой причине, если это прям критично, можно в маунте ребенка эмтить событие в родителя, в этом родителе по рефу дергать ребенка и выполнять нужный код

Andrey Mishagin
Почему?

Попробуй во все хуки проставить консоль логи, и вызвать сначала синхронно компонент, потом асинхронно. И увидеть разницу. При чем лучше дернуть задержку какую-нибудь

Сергей Миртов
Попробуй во все хуки проставить консоль логи, и вы...

Я ни разу асинхронные компоненты не создавал даже и не знаю зачем. Надо бы восполнить этот пробел)

RusaXXX- Автор вопроса
Denis Strokov
только nextTick - грязному подходу грязное решение

не очень понимаю как тогда правильно вызывать методы компонентов? Менять пропсы? Но иногода вот просто нечего менять. Придумать асбстрактную переменную, повесить на нее вотч и вызывать метод?

RusaXXX
не очень понимаю как тогда правильно вызывать мето...

Например так. Можно еще через ивентбас, можно через стор. Но если вам из родителя нужно вызывать методы дочерних компонентов - это нарушение нормального потока

RusaXXX- Автор вопроса
Сергей Миртов
Например так. Можно еще через ивентбас, можно чере...

ивент бас это тоже нарушение нормального потока

RusaXXX
ивент бас это тоже нарушение нормального потока

Ну так это решение, для вашего нарушения)

RusaXXX
не очень понимаю как тогда правильно вызывать мето...

через обмен событиями, не обязательно же делать вызов напрямую у функции: можно повесить слушателя на событие

Denis Strokov
через обмен событиями, не обязательно же делать вы...

Я так понимаю речь про ивент бас?) или прокинуть пропсом объект по ссылке, способного эмитить?

RusaXXX
а можно пример?

в дочернем пишем this.$emit('myEvent', eventProps) в родителе пишем <component @v-on:myEvent="handlerFn" />

RusaXXX- Автор вопроса
Denis Strokov
в дочернем пишем this.$emit('myEvent', eventProps)...

вы понимаете что при таком подходе, как бы моодуль перестает быть модулем, потому что я выношу реализацию метода в родитель

RusaXXX
вы понимаете что при таком подходе, как бы моодуль...

Ну вы и так жестко связали модуль с родителем нарушив инкапсуляцию

тебе выше конечно уже сказали, о еще раз повторю - это ОЧЕНЬ плохое поведение, антипаттерн и вообще)

RusaXXX
вы понимаете что при таком подходе, как бы моодуль...

нормальный поток событий - от ребенка к родителю. нормальный поток данных - от родителя к ребенку. В случае если нужно прокинуть событие между компонентами, которые не ребенок родитель можно использовать ивентбас. Но сама нужда такой штуковины - не совсем корректна

RusaXXX- Автор вопроса
Сергей Миртов
нормальный поток событий - от ребенка к родителю. ...

То есть в моем случае заменить все прямые вызовы на евент бас?

RusaXXX
То есть в моем случае заменить все прямые вызовы н...

ивент бас примерно так же плох как и вызов метода родителя

RusaXXX
))))

что делает метод ребенка?

а хотя подожди, тут же ты дергаешь ребенка, а не родителя. тогда в принципе всё не так плохо. так делать можно, но не часто желательно

RusaXXX- Автор вопроса
Сергей Миртов
что делает метод ребенка?

да по разному, так в двух словах и не опишешь

RusaXXX- Автор вопроса
RusaXXX
да по разному, так в двух словах и не опишешь

То есть если я удалю этот компонент, то и метод должен исчезнуть

RusaXXX- Автор вопроса
Vladimir Voytenko ️
а хотя подожди, тут же ты дергаешь ребенка, а не р...

именно, но типа прямой вызов это не гуд тоже, как я понял

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта