Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase每次返回不同名称的对象_Javascript_Reactjs_Firebase - Fatal编程技术网

Javascript Firebase每次返回不同名称的对象

Javascript Firebase每次返回不同名称的对象,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,我有一个疑问: const questionsRef = firebase .database() .ref('Works') .orderByChild('firebaseKey') .equalTo(this.props.match.params.id); 这是可行的,但作为回报,我得到了: "-LDvDwsIrf_SCwSinpMa": { //!!!this is different for every object I get "answers": { "-L

我有一个疑问:

const questionsRef = firebase
.database()
.ref('Works')
.orderByChild('firebaseKey')
.equalTo(this.props.match.params.id);
这是可行的,但作为回报,我得到了:

"-LDvDwsIrf_SCwSinpMa": { //!!!this is different for every object I get
    "answers": {
        "-LDvEEpkgbB9WFQDHuUZ": {
            "date": {...},
            "downloadURL": "https://firebasestorage.googleapis.com/v0/b/uczsieapp.appspot.com/o/images%2F483a1473-3056-4817-a495-9edb6589873e?alt=media&token=dae88bc8-fa39-4a36-97a4-7c9bbcb3898b",
            "firebaseKey": "-LDvEEpkgbB9WFQDHuUZ",
            "seen": true,
            "workKey": "-LDvDwsIrf_SCwSinpMa"
        }
    },
    "available": true,
    "boostAmount": 1,
    "category": "Historia",
    "createDate": {...},
    "creatorID": "tZS6bfXUujNXUAi6Rd0nPlmye693",
    "finishDate": {...},
    "firebaseKey": "-LDvDwsIrf_SCwSinpMa",
    "level": "Liceum",
    "number": 1,
    "photoURL": "https://firebasestorage.googleapis.com/v0/b/uczsieapp.appspot.com/o/images%2F365bfdd3-351f-4fb9-bca0-35890b2fc16d?alt=media&token=ed1f88bd-00ce-462a-b8eb-2fb4d2850142",
    "pointAmount": 32,
    "pointBoost": 64,
    "solverID": "tZS6bfXUujNXUAi6Rd0nPlmye693",
    "state": "Completed",
    "taskAmount": 4
},
问题是:
-LDvDwsIrf\u SCwSinpMa
是id。每次它都返回一个不同的id。那么我如何实现自动化呢?现在我是这样理解的:

componentDidMount() {
    // var key = ;
    const questionsRef = firebase.database().ref('Works').orderByChild('firebaseKey').equalTo(this.props.match.params.id);
    questionsRef.on('value', (snapshot) => {
        let question = snapshot.val();
        console.log(question);
        let newState = {
            id: question.id,
            category: question.category,
            level: question.level,
            pointAmount: question.pointAmount,
            pointBoost: question.pointBoost,
            photoURL: question.photoURL,
        };
        console.log(newState);
        this.setState({
            question: newState
        });
    });
}

那么,如果对象每次都返回不同的id,那么我怎么才能获得对象中的信息呢

如果
问题ref
等于

   {
       "-LDvDwsIrf_SCwSinpMa": {
           "answers": {},
           ......
      }
    }

Object.key(questionsRef)[0]
如果
questionsRef
等于

   {
       "-LDvDwsIrf_SCwSinpMa": {
           "answers": {},
           ......
      }
    }

Object.key(questionsRef)[0]
将等于
LDvDwsIrf\u SCwSinpMa
questionsRef
是查询(请参阅)

通过在此查询上调用
on()
,您就是“在查询的“位置”侦听数据更改。并且“数据更改时将触发回调”,请参阅文档。因此,如果您每次都收到不同的对象,这是因为在与您的查询对应的节点下创建了一个对象(可能是一个新的
答案
,关于您在问题中发布的JSON)

因此,如果您想要获得一个节点的特定值,那么应该使用
once()
,它将“只侦听指定事件类型的一个事件,然后停止侦听”。doc是

还要注意,“即使查询只有一个匹配项,快照也是一个列表”。这意味着您必须“循环结果”,如:


请参阅此处的详细文档:

问题ref
是查询(请参阅)

通过在此查询上调用
on()
,您就是“在查询的“位置”侦听数据更改。并且“数据更改时将触发回调”,请参阅文档。因此,如果您每次都收到不同的对象,这是因为在与您的查询对应的节点下创建了一个对象(可能是一个新的
答案
,关于您在问题中发布的JSON)

因此,如果您想要获得一个节点的特定值,那么应该使用
once()
,它将“只侦听指定事件类型的一个事件,然后停止侦听”。doc是

还要注意,“即使查询只有一个匹配项,快照也是一个列表”。这意味着您必须“循环结果”,如:

请参见此处的详细文档: