我有一个react组件,它接收来自它的父母App.js的道具。这工作正常。我可以console.log()这个:
componentWillReceiveProps(props) {
console.log(props);
this.getPosts()
}
console.log()在这里正确显示了道具:
{pageNumber: 2, loggedIn: true}
但是,在我的getPosts()方法中,我从this.props
读取了
getPosts() {
console.log("in post list and page is" + this.props.pageNumber)
}
它打印出来:
in post list and page is 1
它始终落后于1个计数,无论是什么 - 意思是,当道具的pageNumber值为3时,它打印为2,props的值为4,打印为3,等等。这导致我在分页服务器端时获取不正确的帖子。
如何获得正确的值?
答案 0 :(得分:2)
您正在通过getPosts
功能调用componentWillReceiveProps
。此时,组件的原始道具尚未更新,因此访问this.props.pageNumber
中的getPosts
并未显示更新的道具,您应将nextProps传递给getPosts函数,然后像
componentWillReceiveProps(nextProps) {
console.log(nextProps);
this.getPosts(nextProps);
}
getPosts(nextProps) {
console.log("in post list and page is" + nextProps.pageNumber)
}
答案 1 :(得分:1)
道具是下一个新道具,而this.props尚未在此生命周期阶段更新。你可能应该直接将道具传递给getPosts(props.pageNumber)而不是
https://facebook.github.io/react/docs/react-component.html#componentwillreceiveprops
componentWillReceiveProps(nextProps)
在安装的组件之前调用componentWillReceiveProps() 收到新的道具。如果您需要更新状态以响应 prop更改(例如,重置它),您可以比较this.props 和nextProps并使用this.setState()执行状态转换 这种方法。