javascript - 在 componentWillMount 中设置状态时如何解决日志记录问题
问题描述
我遇到了状态问题,因为我不是 100% 我正在正确使用 componentDidMount 和 componentWillMount。
我已经设置了构造函数和超级道具,并且我正在使用 getCurrentUser() 方法获取用户对象并使用新对象设置用户状态。
componentWillMount() {
const current_user = getCurrentUser().then(user => {
this.setState({
user: user
});
console.log(user);
});
}
componentDidMount() {
console.log(this.state.user);
}
它在 componentWillMount 中正确记录用户,但在 componentDidMount 中记录一个空对象。
任何指导将不胜感激!
解决方案
干脆不要使用componentWillMount,在componentDidMount中做。
实际上,componentDidMount 是调用获取数据的最佳位置,原因有两个:
使用 DidMount 可以清楚地表明在初始渲染之前不会加载数据。这会提醒您正确设置初始状态,这样您就不会出现导致错误的未定义状态。
如果您需要在服务器上渲染您的应用程序(SSR/同构/其他流行语),componentWillMount 实际上会被调用两次——一次在服务器上,一次在客户端上——这可能不是你想要的。将数据加载代码放入 componentDidMount 将确保仅从客户端获取数据。
推荐阅读
- solr - 删除 Solr 中在其他文档中出现超过 X 次的字符串
- markdown - 来自 Hugo 的图像未显示在 GitHub 页面上
- sharepoint - 如何在 Sharepoint Online 中自定义搜索框
- javascript - 使用 JQuery 洗牌表的列
- swift - 应用程序仅在 iOS 13 上崩溃:“必须返回 MPRemoteCommandHandlerStatus 或将完成处理程序作为第二个参数。”
- list-comprehension - 使用python条件的列表理解中的elif
- python - Python中NxM的矩阵乘法
- sql-server - 在 SQL Sever 中提取包含多个命名空间和不同属性的 soap xml 标记值
- r - 开罗:为什么开罗不能正常工作?
- python - 如何在python中调整base64编码图像的大小