Vue: рендерить v-for постепенно?

#javascript #vue.js #vue-component #v-for

#javascript #vue.js #vue-компонент #v-для

Вопрос:

У меня есть цикл v-for, который многократно отображает компонент шахматной игры. Однако компонент ChessGame сложен, загрузка занимает много времени, несколько сотен миллисекунд каждая, и цикл отображает десятки из них. Таким образом, сайт всегда зависает на несколько секунд и ничего не показывает, прежде чем он покажет все игры.

Есть ли подсказка, что я могу передавать Vue для повторного выполнения после каждой итерации, чтобы страница медленно заполнялась ими? Или способ работы с шаблонами Vue не поддерживает это?

 <ul v-for="(game, index) in competitions[selected_competition].games" v-bind:key="game.pgn">
  <div>
    <h4>Game {{ index 1 }}</h4>
    <ChessGame :id="'board_'   index" :ref="'board_'   index" :gameinfo="game" style="width: 400px"></ChessGame>
  </div>
</ul>
 

Ответ №1:

Есть ли подсказка, что я могу передавать Vue для повторного выполнения после каждой итерации, чтобы страница медленно заполнялась ими?

Насколько я знаю, в vue нет такой функции, чтобы медленно показывать ваши данные, хотя то, что вы можете делать, пока ваши данные не будут готовы, — это показывать загрузчик скелетов.

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

Я рекомендую вам проверить это в vuetify: https://vuetifyjs.com/en/components/skeleton-loaders /

Комментарии:

1. Я прибегнул к отсрочке тяжелой работы с помощью setTimeout(this.process, 0), что работает довольно хорошо