@anton_trofimov95

Почему не получается слепить 2 полученных массива в 1?

Пишу такой код:
Vue:
data() {
    return {
      info: null,
      users: null
    };
  },
  mounted() {
    this.axios
      .get("https://jsonplaceholder.typicode.com/posts")
      .then(response => (this.info = response.data));
    this.axios
      .get("https://jsonplaceholder.typicode.com/users")
      .then(response => (this.users = response.data));
  },
  computed: {
    fullArray() {
      return this.info.concat(this.users)
    }
  }

Html:
<div id="app">
    {{fullArray}}
    <div>
      <ul>
        <li class="box" v-for="(item,index) in info" :key="item.id">{{info[index].body}}</li>
      </ul>
      <ul>
        <li class="users" v-for="(user,index) in users" :key="user.id">{{users[index].name}}</li>
      </ul>
    </div>
  </div>

2 массива по отдельности получил, вывел на страницу, все норм. Но почему-то слить их не получается, в консоли выдает ошибку
TypeError: Cannot read property 'concat' of null
и совсем не рендерит компонент. Если убрать computed, то всё, конечно же, хорошо рендерится. Я пытаюсь сделать тестовое задание5e3ab003cb572743796924.png, как там видно, нужно получить имя с одного запроса, текст комментария с другого и вывести это в одном элементе списка
{{fullArray}} просто для проверки вывел
В чем ошибка и как в итоге их объединить?
  • Вопрос задан
  • 198 просмотров
Решения вопроса 2
Kozack
@Kozack Куратор тега Vue.js
Thinking about a11y
Потому что сначала компонент отображается, а потом приходят данные. И в момент первого вычисления fullArray this.info === null

UPD
Добавьте проверку, что-то в таком духе:
fullArray() {
  const arr = []

  if (this.info) arr.concat(this.info)
  if (this.users) arr.concat(this.users)

  return arr
}
Ответ написан
0xD34F
@0xD34F Куратор тега Vue.js
Cannot read property 'concat' of null

В чем ошибка и как в итоге их объединить?

Так написано же в чём - не удаётся прочитать свойство concat у null. Вы пытаетесь выполнять какие-то действия над свойствами компонента, как над массивами, но данные ещё не загрузились, и они (свойства) всё ещё null.

Выполняйте объединение массивов только в том случае, если оба свойства не null:

computed: {
  fullArray() {
    const { users, info } = this;

    return user && info
      ? здесь объединяете данные массивов
      : [];
  },
},

Или установите в качестве начальных значений пустые массивы вместо null.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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