Javascript ComponentReceiveProps获得的道具值与渲染中的不同
我试图通过检测组件willreceiveprops中的项目不同来进行无限滚动,如下所示Javascript ComponentReceiveProps获得的道具值与渲染中的不同,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我试图通过检测组件willreceiveprops中的项目不同来进行无限滚动,如下所示 componentWillReceiveprops(nextProps) { //if infinite load triggered if(!isEqual(nextProps.items, this.props.items)){ this.props.items.push(...nextProps.items) //this
componentWillReceiveprops(nextProps) {
//if infinite load triggered
if(!isEqual(nextProps.items, this.props.items)){
this.props.items.push(...nextProps.items)
//this.forceUpdate()
console.log(this.props.items) // newly items are merge with previous items array, worked.
}
}
render() {
const { items } = this.props
console.log(items) // still old items, newly loaded items is not here?
return(<div></div>)
}
组件将接收道具(下一步){
//如果触发无限负载
if(!isEqual(nextrops.items,this.props.items)){
this.props.items.push(…nextrops.items)
//这个.forceUpdate()文件
console.log(this.props.items)//新项目与以前的项目数组合并,已工作。
}
}
render(){
const{items}=this.props
console.log(items)//仍然是旧项目,新加载的项目不在这里?
返回()
}
但是我的渲染方法中的
items
和组件中的items
将接收道具
不一样吗?我还尝试了forceUpdate
但仍然无法使这个无限卷轴工作。道具应该是不可变的。看见引述:
React的理念是,道具应该是不变的和自上而下的。这意味着家长可以将任何道具值发送给孩子,但孩子不能修改自己的道具。你要做的是对传入的道具做出反应,然后,如果你想,根据传入的道具修改你孩子的状态
所以你永远不会更新你自己的道具,或者父母的道具。曾经你只会更新自己的状态,并对父母给你的道具值做出反应
您正在使用this.props.items.push(…)
,它正在更改接收的道具。这是React建议你不要做的事情,它肯定会引起各种各样的麻烦。您需要开始以不同的方式思考如何更改应用程序中的应用程序状态
作为建议,您可以让父组件将方法作为prop
发送给您的子组件,当您需要更改组件的状态时,该方法将被回调。props
应该是不可变的。看见引述:
React的理念是,道具应该是不变的和自上而下的。这意味着家长可以将任何道具值发送给孩子,但孩子不能修改自己的道具。你要做的是对传入的道具做出反应,然后,如果你想,根据传入的道具修改你孩子的状态
所以你永远不会更新你自己的道具,或者父母的道具。曾经你只会更新自己的状态,并对父母给你的道具值做出反应
您正在使用this.props.items.push(…)
,它正在更改接收的道具。这是React建议你不要做的事情,它肯定会引起各种各样的麻烦。您需要开始以不同的方式思考如何更改应用程序中的应用程序状态
作为建议,您可以让父组件将方法作为prop
发送给您的子组件,当您需要更改组件的状态时,该方法将被回调。是否尝试将insertprops
作为第二个参数@Nicolabetelloni没有第二个参数,尽管文档解释得很清楚,您是否尝试过将insertprops
作为第二个参数@Nicolabetelloni没有第二个参数,尽管文档很好地解释了它=>usethis.setState()
他直接推到道具上,这让我觉得他可能想在父组件中使用它们,所以我建议从父组件传入回调方法。如果他只在子组件中保留项
数组,那么是的,setState
是一种方法。=>使用this.setState()
他直接推动道具
,这让我觉得他可能想在父组件中使用它们,所以我建议从父组件传入回调方法。如果他将项
数组仅保留在子组件中,那么是的,设置状态
是一种方法。