javascript - 在 ReactJs 中使用条件渲染
问题描述
我应用 if else 语句来根据firestore 是否已准备好并且用户已登录来显示不同的内容,但是即使firebase.auth.uid已正确连接到商店,它也会返回未定义,并且我被困在加载块.
仪表板.js:
...
componentDidMount() {
console.log("our props", this.props.firebase.auth.uid)
}
render() {
const { fireStore, firebase } = this.props;
if(fireStore && firebase.auth.uid){
return (
<div className="container">
<div className="row">
<BoardList boards={fireStore} />
</div>
</div>
)} else {
return(
<div style={{ display: 'flex',flex:1 ,flexDirection: "column", justifyContent: 'center', alignItems: 'center',}}>
<SelfBuildingSquareSpinner color={Color.bgColor} style={{marginTop: '5em'}} />
<div style={{textAlign:"center", marginTop: '5em'}}>Welcome to Scrum Board</div>
</div>
)
}
}
const mapStateToProps = state => {
console.log("our state from dashboard ",state);
return {
scrumBoard: state.scrumBoard,
fireStore: state.fireStore.ordered.scrumboards,
firebase: state.firebase,
users: state.users
};
};
const mapDispatchToProps = (dispatch) => {
return {
fetchData : () => dispatch(fetchData()),
}
}
export default compose(
connect(
mapStateToProps,
mapDispatchToProps
),
firestoreConnect([{ collection: "scrumboards" },{collection: "users"}])
)(Dashboard);
this.props.firebase.auth.uid 未定义,我被困在第二个街区。&& 我的控制台显示 firebase 和 firestore 都填充了数据:
我认为这是组件生命周期问题,其中,此仪表板组件在 store 具有值之前加载,但我认为一旦填充它应该呈现 boardlist 组件。
解决方案
在 compose 中切换 HOC 的顺序解决了这个问题!!!坦率地说,我现在不明白为什么......但如果你遇到这个问题,我希望这会有所帮助。你的代码应该是这样的:
...
export default compose(
firestoreConnect([{ collection: "scrumboards" },{collection: "users"}]),
connect(
mapStateToProps,
mapDispatchToProps
)
)(Dashboard);
推荐阅读
- php - 我希望将数组 php 的结果替换为当前时间
- javascript - 如何获取数组中所有重复项的总和?
- mysql - 如何协调主键、非空、唯一、自动增量和生成?
- sql - Knex 中的 knex.into('sometable') 和 knex('sometable) 有什么区别?
- parsing - 使用 Gson 将一个字段值映射到另一个字段,例如第一个为空或值为 0
- swift - Google Cloud IoT:如何从用 Swift 编写的 iOS 应用程序连接到 MQTT 桥接器?
- sql - SQL Server - 操作值以创建字符串
- r - 急诊室R模拟程序问题
- java - 使用 Java 代码生成空白报告,在 Studio 中预览 OK
- react-native - React 原生表单设计