我正在编写
形式的组件 <MyComponent sources={this.state.sources} />
首次安装组件时sources={{}}
,一个空字典。由于这个组件包装了一个现有的Javascript库,我正在实现一个自定义的diffing函数。为了使这个差异函数第一次工作,它需要首次知道this.props.sources = {}
并在后续更新时知道this.props.sources= { ... stuff ... }
。 React文档说初始挂载时没有调用componentWillRecieveProps
,但我正在尝试执行以下操作:
componentWillReceiveProps(nextProps) {
console.log(this.props.sources)
}
在使用MyComponent
初始化sources={{}}
后,我将sources={... stuff ...}
传递给this.props.sources
,我希望componentWillReceiveProps
内的{}
为nextProps
this.props.sources
尚未更新。但是,{... stuff ...}
会返回geom_density_2d()
,这是传入的最新道具。
答案 0 :(得分:1)
我认为这是因为在js中通过引用传递。
在您的父组件中,您执行:<MyComponent sources={this.state.sources} />
,如果您这样做,我认为您也执行了this.state.sources.push(something);
,这是更改状态的错误方法,它会破坏子组件{{1}的引用比较你能确定你没有修改原来父母的状态吗?
答案 1 :(得分:0)
this.props.sources
您的componentWillReceiveProps方法内部可能是指父类的道具,而不是传入的道具。尝试记录
nextProps.sources
而是看看它是否更符合您的预期。