Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ComponentReceiveProps获得的道具值与渲染中的不同_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript ComponentReceiveProps获得的道具值与渲染中的不同

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

我试图通过检测组件willreceiveprops中的项目不同来进行无限滚动,如下所示

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
发送给您的子组件,当您需要更改组件的状态时,该方法将被回调。

是否尝试将insert
props
作为第二个参数@Nicolabetelloni没有第二个参数,尽管文档解释得很清楚,您是否尝试过将insert
props
作为第二个参数@Nicolabetelloni没有第二个参数,尽管文档很好地解释了它=>use
this.setState()
他直接推到
道具上,这让我觉得他可能想在父组件中使用它们,所以我建议从父组件传入回调方法。如果他只在子组件中保留
数组,那么是的,
setState
是一种方法。=>使用
this.setState()
他直接推动
道具
,这让我觉得他可能想在父组件中使用它们,所以我建议从父组件传入回调方法。如果他将
数组仅保留在子组件中,那么是的,
设置状态
是一种方法。