开发者问题收集

无法从数组 react 和 Firestore 获取数据

2018-10-27
1297

如何从数组中访问值 exist?我想我没有将数组传递进去?有任何帮助或建议吗?

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

我有这个变量 isExist,其中包含来自下面控制台的响应。

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

如何访问数组中的 exist?当我尝试 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个回答

isFavorite 返回一个函数,该函数接受一个参数 dispatch 并返回 exist 数组。您似乎使用异步代码来填充 exist 数组。因此,当该函数返回 exist 时,它是一个空数组 [] 。您需要继续使用承诺或使用 await 。并且您需要调用 isFavorite 返回的函数。

如果 this.props.isFavoriteconst isFavorite 不同,请添加 this.props.isFavorite 的代码。

UjinT34
2018-10-27

您正在创建一个数组对象。然后是数组对象 {data}[]。因此,问题是,数据实际上不仅是一个数组,而且还是一个对象。

尝试这样做。

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

现在您将拥有存在数据,它将是一个对象数组。然后从中迭代。

 exist[0].id;
 //or try 
 exist[0].data.id; 
 //Depends on how you implement your data.
Aizen
2018-10-27

由于客户端数组不包含具有键和值的对象,我建议您尝试使用带有 split() 的索引数组来从数组中获取 id 值和存在值,例如

例如

  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);

在这里将 data = []; array 更改为 data ={}; object

   querySnapshot.forEach((doc) => {
    var data = {};
    data.id = doc.id;
    data.exist = doc.exists;
    exist.push(data)
 });
Hemadri Dasari
2018-10-27