我正在拨打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。这个表现得很好。
答案 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 />
希望这个答案:)