anov
@anov
Junior coder

Как передать пропсы, данные для которых получаем асинхронно?

Добрый день.
Имеется родительский компонент, который должен передавать дочерним компонентам массив с объектами. Массив получаем асинхронно с помощью fetch
let newsList = [];
// newsList = [ {id:1, title: "Заголовок"}, {id:2, title: "Заголовок"}...]

const sendData = () => {
  fetch('/api/news-list.json', requestOptions)
      .then(response => response.json())
      .then(result => newsList = result)
}

<ListLoading :news-list="newsList" />


Дочерний компонент:
defineProps({
  newsList: Array
});

<ListLoadingItem v-for="item in newsList" :key="item.id" :news-list-item="item" >
      {{item.id}}
</ListLoadingItem>


Шаблон компонента ListLoadingItem:
defineProps({
  newsListItem: Object
});

<div class="list-loading-item">
      <h3 class="gw-list-loading-item__title">
        {{ newsListItem.title }}
      </h3>
</div>


Данные по фетчу приходят, но в пропсе остается значение по умолчанию - пустой массив. В корневой компонент вставлял проверку v-if - не помогло:
<ListLoading v-if="sendData" :news-list="newsList" />

пропсам задавал результат выполнения функции - не помогло:
<ListLoading :news-list="sendData" />
И вроде асинхронные компоненты это в другую сторону. Можете, пожалуйста, подсказать что делаю не так?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@Kadonomaro
У вас newsList не реактивно
Замените на:
const newsList = ref([])
В методе получения данных:
newsList.value = result
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov Куратор тега Vue.js
Помог ответ? Отметь решением.
v-if="list.length"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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