У меня линтер на такое точно ругается.
Не надо совмещать v-if и вложеннные в него v-for в одном блоке.
Надо разнести.
И сделать v-else, если нужно, когда ничего не соответствует (типа "Ничего нет").
Да, DOM не может меняться сразу, и реактивность тут не работает.
Функция должна завершиться и вернуться к основному потоку.
$nextTick или setTimeout(() => {}); , что одно и то же.
Потому что объекта для listenForWhisper сейчас нет.