无法从阵列反应和Firestore获取数据

时间:2018-10-27 02:27:00

标签: reactjs firebase google-cloud-firestore

如何访问数组中存在的值?我想我没有在内部传递数组?任何帮助或建议

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 :(得分:1)

isFavorite返回一个带有一个参数dispatch并返回exist数组的函数。您似乎使用了异步代码来填充exist数组。因此,当该函数返回exist时,将是一个空数组[]。您需要继续使用Promise或使用await。然后,您需要调用isFavorite返回的函数。

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

答案 1 :(得分:0)

您正在创建数组对象。然后是数组对象{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.

答案 2 :(得分:0)

由于客户端数组不包含带有键和值的对象,所以我建议您尝试使用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);

这里更改数据= [];数据数组= {};对象

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