让React等待Firebase查询结束

时间:2018-06-11 12:37:36

标签: javascript reactjs firebase firebase-realtime-database

我正在拨打Firebase电话,检查用户是否有房产。

如果他有,我希望他被重定向到第A页,否则我想将他重定向到第B页。

问题是我认为Firebase需要很长时间才能回来,所以React只是使用默认值渲染组件。

我的代码:

questionId -LEU6zUnLTO84KGh3pua     CheckIfHasCurrentTasksComponent.js:35
question -LEU1fr2TmxHFKD3ObG_       CheckIfHasCurrentTasksComponent.js:18
questionId -LEU1fr2TmxHFKD3ObG_     CheckIfHasCurrentTasksComponent.js:35
redirect -LEU1fr2TmxHFKD3ObG_       CheckIfHasCurrentTasksComponent.js:23

日志:

this.props.match.params.id

由于某种原因,代码似乎运行了两次。 id是来自前一个组件的id。最后3个是数据库中的。

令人困惑的部分是它们像异步一样被记录。如何让它同步/等待Firebase的响应返回?

<!--------camera----------> <a-entity rotation="0 90 0"> <a-camera user-height="0" look-controls> <a-cursor fuse="true" fusetimeout="4000" position="0 0 -0.1" raycaster="objects: .clickable" geometry="primitive: ring; radiusInner: 0.002; radiusOuter: 0.003" material="color: red; shader: flat"> <a-animation attribute="scale" to="3 3 3" dur="2000" begin="cursor-fusing" fill="backwards" easing="linear"> </a-animation> </a-cursor> <a-entity id="redcircle" position="0 0 -0.1" geometry="primitive: ring; radiusInner: 0.007; radiusOuter: 0.0077" material="color: red; opacity: 0.25; shader: flat"></a-entity> </a-camera> </a-entity> 是来自前一个组件的ID。这个表现得很好。

1 个答案:

答案 0 :(得分:2)

  

令人困惑的部分是它们像异步一样被记录。如何让它同步/等待Firebase的响应返回?

有一种方法可以让它看起来像是同步的。

您可以将变量附加到此类,默认情况下为false。一旦您收到回复,就可以将该变量设置为true

例如 -

this.state.isQuestionIDAvailable=false;

在你的firebase响应中,(在使用时请注意this的范围)

this.setState({
    isQuestionIDAvailable: true
 });

然后,您可以将条件附加到您的组件,如 -

{this.state.isQuestionIDAvailable && <QuestionComponent />}

此外,如果<QuestionComponent/>是你唯一呈现的东西,那么你也不需要大括号。你可以把它写成

return this.state.isQuestionIDAvailable && <QuestionComponent />

希望这个答案:)