Не удается получить данные из массива React и Firestore

Как я могу получить доступ к существующему значению из массива? Думаю, я не передал массив внутрь? Любая помощь или совет

var isExist = this.props.isFavorite(this.props.code);
console.info(isExist)

У меня есть эта переменная isExist, содержащая ответ из консоли ниже.

[]
 client: [id: "LvR05w9v9xrC3r4V1W8g", exist: true]
 length: 1
 _proto_:Array(0)

Как я могу получить доступ к существующим в моем массиве? Когда я пробовал isExist [0] .exist, я получаю сообщение об ошибке. Любая помощь?

isExist.exist = Undefined 
isExist[0].exist = TypeError: Cannot read property 'exist' of undefined

любимый метод, при котором я получаю доступ и отправляю данные в массив

export const isFavorite = (data) => dispatch => {
  let exist = []; 

  var clientQuery = firebase.firestore().collection(path).where('client_id', '==', data);
  clientQuery.get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        var data = [];
        data.id = doc.id;
        data.exist = doc.exists;
        exist.push(data)
     });
 });
 return exist;
}

Какой тип данных переменной isExist?

codejockie 27.10.2018 08:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
1
1 133
3

Ответы 3

Вы создаете объект массива. Затем объект массива {данные} []. Итак, проблема в том, что данные на самом деле являются не только массивом, но и объектом.

Попробуй сделать это.

var data;
data.id = doc.id;
data.exist = doc.exist;
exist.push(data);

Теперь у вас будут существующие данные, которые будут массивом Object. Затем выполните итерацию от него.

 exist[0].id;
 //or try 
 exist[0].data.id; 
 //Depends on how you implement your data.

Привет, Айзен, index.js: 50 Uncaught (в обещании) TypeError: Невозможно установить свойство id of undefined

Jay Ar Viluan 27.10.2018 06:06

Вам не нужна временная переменная. exist.push({id: doc.id, exist: doc.exists})

UjinT34 27.10.2018 06:44

Уджин, ты прав, Уджин, в этом нет необходимости. Но Джей Ар новичок в ООП, ты не можешь сказать? Помните об Уджине, отвечая на вопросы. Вы должны убедиться, что адаптировались к их способу программирования, вместо того, чтобы позволять им адаптироваться к вашему. Отвечайте их собственными шаблонами вместо того, чтобы переделывать их в соответствии с вашими лучшими практиками.

Aizen 27.10.2018 07:21

isFavorite возвращает функцию, которая принимает один аргумент dispatch и возвращает массив exist. Кажется, вы используете асинхронный код для заполнения массива exist. Поэтому, когда эта функция возвращает exist, это пустой массив []. Вам нужно либо продолжать использовать обещания, либо использовать await. И вам нужно вызвать функцию, возвращаемую isFavorite.

Если this.props.isFavorite и const isFavorite не совпадают, добавьте, пожалуйста, код для this.props.isFavorite.

Поскольку клиентский массив не содержит объекта с ключами и значениями, я бы порекомендовал вам попробовать с массивом индекса с split (), чтобы получить значение идентификатора и существующее значение из массива, например

Нравиться

  var isExist = this.props.isFavorite(this.props.code);
  var id = isExist.client[0];
  var exist = isExist.client[1];
  var idValue = id ? id.split(': '): '';
  console.info(idValue);
  const existValue = exist ? exist.split(': '): false;
  console.info(existValue);

А вот измените data = []; массив в data = {}; объект

   querySnapshot.forEach((doc) => {
    var data = {};
    data.id = doc.id;
    data.exist = doc.exists;
    exist.push(data)
 });

Другие вопросы по теме