Не удается получить данные из массива реагировать и Firestore - PullRequest
0 голосов
/ 27 октября 2018

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

var isExist = this.props.isFavorite(this.props.code);
console.log(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;
}

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

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

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

0 голосов
/ 27 октября 2018

Поскольку клиентский массив не содержит объект с ключами и значениями, я бы порекомендовал вам попробовать использовать массив индекса с 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.log(idValue);
  const existValue = exist ? exist.split(': '): false;
  console.log(existValue);

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

   querySnapshot.forEach((doc) => {
    var data = {};
    data.id = doc.id;
    data.exist = doc.exists;
    exist.push(data)
 });
0 голосов
/ 27 октября 2018

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

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

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...