该组件接收对象列表作为prop。我想无限滚动地显示它。 它的状态为“ curNum”,这是当前要显示的项目数。向下滚动时,“ curNum”会更改,因此将根据“ curNum”对项目列表进行切片。
对象列表将由父组件更新,并且“ curNum”应重置为初始值。
使用componentWillReceiveProps我可以做到:
componentWillReceiveProps(newProps) {
this.setState({
curNum: initNum,
});
}
但是如何使用getDerivedStateFromProps
重写它?我读到即使状态改变,新方法也会被触发。那么我怎么知道我正在接收新道具呢?
我是否必须将列表的副本镜像到状态,然后深入检查每次对象列表是否相等?
答案 0 :(得分:1)
道具更改时,有几种方法可以用来更新状态
代码:
static getDerivedStateFromProps(props, state) {
if (state.prevCurNum !== props.initNum) {
return {
currNum: props.initNum,
prevCurNum: props.initNum
}
} else {
return { prevCurNum: props.initNum }
}
}
代码
<MyComponent key={this.state.initNum} initNum={this.state.initNum} />
和在MyComponent中
constructor(props) {
super(props);
this.state= {
currNum: props.initNum
}
}
在上面的示例中,如果prop initNum
发生变化,则组件的键将发生变化,这将导致组件重新挂载并调用其构造函数