从mapStateToProps到setState
从mapStateToProps到setState
可以通过mapStateToProps设置属性并使用setState来改变状态并将信息保存到数据库吗?数据是从Google Books API返回的,我想保存其中的一小部分数据。
我的状态:
state = { title: '', subtitle: '', authors: '', description: '', thumbnail: '', buyLink: '' };
设置setState和保存到数据库的函数
let { book } = this.props.book; let bookInfo; if (book !== null) { const onSave = (e) => { e.preventDefault(); let savedData = this.setState({ title: book.volumeInfo.title, subtitle: book.volumeInfo.subtitle, authors: book.volumeInfo.authors, description: book.volumeInfo.description, thumbnail: book.volumeInfo.imageLinks.thumbnail, buyLink: book.saleInfo.buyLink }); console.log(savedData); }; // this.props.saveBook(savedData, this.props.history); bookInfo =; }
savedData返回undefined
const mapStateToProps = (state) => ({ book: state.books });
从mapStateToProps到setState的问题出现的原因是,当使用this.setState来更新组件的状态时,由于setState是一个异步操作,所以在setState执行完之前,无法立即获得更新后的状态。这就导致了在setState之后立即访问this.state的值时,可能得到的是更新之前的值,而不是更新后的值。
为了解决这个问题,可以使用setState的回调函数来确保在获取更新后的状态时,setState已经执行完毕。在回调函数中,可以访问到更新后的状态,并进行相应的操作。
具体的解决方法是,在调用setState时,传入一个回调函数作为第二个参数。在这个回调函数中,可以通过this.state来获取到更新后的状态,并进行相应的操作。在上述示例代码中,回调函数中使用console.log来输出更新后的状态,并调用this.props.saveBook来保存更新后的状态。
通过使用setState的回调函数,可以确保在获取更新后的状态时,已经完成了setState的操作,避免了获取到旧状态的问题。这样可以保证在更新状态后,进行后续操作时,所使用的状态都是最新的。