Можно ли контролировать обновление компонента vue?
У меня есть что-то типа аккордеона. В каждом раскрывающемся блоке таблица. Данные в таблице с периодичностью где-то в секунду обновляются. И соответственно аккордеон состоит где-то из 5-7 блоков, то есть 5-7 таблиц. Одна на виду, другие закрыты, но таблицы в них существуют, они находятся в блоке с высотой 0px и соответственно тоже обновляются. Можно ли как-то таблице-компоненту, которая не открыта, запретить обновляться. Упреждая ответ, что можно сделать v-if. Да можно, но тут скорее вопрос чисто теоретический, как я могу ручками остановить обновление компонента, а затем снова его возобновить. Заранее спасибо.
Типичный вопрос типа я ничего не делал оно само.
Итак разбираем аккординг это структура которая реагирует на действия пользователей и встроенный таймер.
И то и другое вы можете перехватить, грамотно написанный компонент еще и эмитит события, например onBeforeNextFrame. Соответственно вам нужно его перехватить и выставить флажок в истину или ложь.
Мужик, ты либо не читал вопрос, либо не умеешь объяснять, но берешься. Причем тут "ничего не делал оно само". Это вообще не в тему. У меня как бы все работает, а вопрос как я написал чисто теоретический. Про таймер тоже ничего не писал, с чего взял, что там таймер я тоже не понял. Аккордеон может работать и без таймера и как емит события заставит компонент не обновляться из твоего ответа непонятно.
Еще раз для мастера дознания, который не мужик. Вопрос не про таймер, вопрос можно ли контролировать обновление компонента динамически, без v-if. Как пример аккордеон с таблицами. Но вопрос, как я написал, скорее теоретический. Причем тут оно само и т.п. - это уже фантазии или желание покрасоваться, тут уж я не знаю. Почитав, погуглив, я думаю, хотя может ошибаюсь, что надо смотреть в направлении v-memo. И причем тут preventDefaul(). Он служит для отмены события по умолчанию, как это связано с тем что компонент не будет обновляться при изменении пропса в которых лежат данный и которые являются реактивным, я не понял. Либо изъяснитесь как-то понятнее, либо игнорируйте такие вопросы как эти
Виктор, рендер идет сверху вниз в случае пропсов, так что просто не изменяйте данные. что же до того что творится внутри компонента вы можете управлять отрисовкой отправляя события до смены кадра и после. И внутри компонента в зависимости от принятых данных продолжать менять кадр или нет
Как понять не изменяйте данные. К примеру есть компонент, он пропсом принимает пропсом массив, к примеру из чисел arr: [{num: 1}, {num: 2}, {num: 3}, {num: 4}, {num: 5}, {num: 6}, {num: 7}]. Внутри простой шаблон ul а в нем <li v-for="item in arr">{{ item.num }}</li>. Через к примеру секунду в родительском компоненте мы поменяли массив на такой arr: [{num: 7}, {num: 3}, {num: 2}, {num: 4}, {num: 5}, {num: 6}, {num: 1}]. И соответственно компонент обновился и вывел новый порядок цифр. Будем считать, что этот порядок меняется каждые 3 сек. (первый массив, потом второй, потом первый и т.д). В какой-то момент я, к примеру нажал кнопку и поменял флаг isRender с true на false. Если можно, объясните как вы собираетесь управлять отрисовкой без v-if. Как заставите не отрисовывать новые данные а потом снова заставить рисовать при изменении флага isRender. Я вот не могу понять как.
Виктор, ну вам же новый массив откуда-то прилетает и вы его пишете в переменную, которую пропсом в таблицу передаёте. Так не обновляйте переменную. Пропсы не обновятся и перерендера таблицы не будет.
Если только положить пропс в переменную data, а потом повесить watch на пропс и там уже обновлять или не обновлять значение в data? В варианте который я описал выше, для всех таблиц одни данные, разбитые по условию, и не обновлять пропсы просто нереально. Вернее можно конечно, но это будет очень трудозатратно и сложно читаемым.