reactjs - 反应还原 | 使用 mapStateToProps 设置状态
问题描述
我想使用从 mapStateToProps 获得的道具设置组件的本地状态。当我在 ComponentWillMount() 方法或 ComponentDidMount() 方法中使用 this.setState 时,它是未定义的。
componentWillMount() {
this.props.fetchBooks(this.props.id);
this.setState({
books:this.props.books
})
}
const mapStateToProps = (state, ownProps) => {
let id = ownProps.match.params.book_id;
return {
id: id,
books: state.library.books,
};
};
'books' 数据是使用 mapDispatchToProps 获得的 fetchBooks() 函数检索的。如何使用从 mapStateToProps 获得的道具设置状态?
解决方案
问题可能this.props.fetchBooks
是异步操作。在这种情况下,this.setState
在操作完成之前调用,因此是未定义的值。
但是为什么要将书籍存放在当地?为什么不直接使用books
道具呢?
使用派生状态通常是不必要的,而且可能不是一个好主意(请参阅React 官方网站上的这篇博文以获得深入的解释)。
如果您确实需要将书籍存储在当地状态,您可以:
- 如果
fetchBooks
返回一个承诺,使用then
或await
(并按照@Baruch 的建议移动componentDidUpdate中的代码) - 使用getDerivedStateFromProps
推荐阅读
- opencv - 在 OpenCV 中转换 CV_16UC1 类型的深度图像
- java - 替换字符串java中的所有√num
- linux - 如何清理和管理overlay2 docker?
- javascript - 在 React 组件中的页面加载时自动上传文件不起作用
- python - 在 Python 中使用单例方法在日志包中创建一个实例
- database-design - 逻辑数据模型中的子类型
- java - 验证失败(Firebase 安卓)
- arrays - 如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据
- reactjs - 如何为在应用服务上使用 azure devops 管道部署的反应应用设置 .env
- linux - 如何根据用户输入使用 NASM 汇编器编辑 8 个字符的字符串?