Javascript 无法检测连接到ComponentDidUpdate中Redux存储的道具中的更改
出于某种原因,我无法检测ComponentDidUpdate()中道具的更改 父组件:Javascript 无法检测连接到ComponentDidUpdate中Redux存储的道具中的更改,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,出于某种原因,我无法检测ComponentDidUpdate()中道具的更改 父组件: class Parent extends Component{ componentDidUpdate(prevProps,prevState){ // here, prevProps is the same as this.props even though the // consultations object is changed by the date component }
class Parent extends Component{
componentDidUpdate(prevProps,prevState){
// here, prevProps is the same as this.props even though the
// consultations object is changed by the date component
}
render(){
return(
<p>{this.props.consultation.date}</p> /* Changes when date
component changes the date. This works! */
<DateComponent />
);
}
}
function mapStateToProps({consultation}){
return {consultation}
}
export default connect(mapStateToProps, null)(Parent)
现在,您正在将一些属性从state复制到consultation中,并以如下状态结束:
{
...state,
consultation : {
...state,
date: action.data.date
}
}
我怀疑那是你想要的。我猜你是有意的:
选择(1):
{
...state,
date: action.data.date
}
{
...state,
consultation : {
date: action.data.date
}
}
或者你的意思是咨询是国家的财产,比如:
var consultations_copy = {...state.consultations}
选择(2):
{
...state,
date: action.data.date
}
{
...state,
consultation : {
date: action.data.date
}
}
您选择上面的选项(1)还是选项(2)取决于您的数据模型
要实现选择(1):
或实现选择(2):
这个问题与对象的深度复制有关 我的咨询对象有这样一种结构:
consultations = {
3322345: {id:123,date:10/10/2018},
1234567: {id:456,date:10/10/2018}
}
我的错误是,在减速器中,我会首先复制当前状态,如下所示:
var consultations_copy = {...state.consultations}
这是一个大错误!因为这不做对象的深度复制,并且仍然引用原始对象
因此,当我做出类似于[1234567].date=“12/12/2018”的更改时,我实际上是在更改原始对象
进行深度复制的最佳方法是:
var consultations_copy = JSON.parse(JSON.stringify(state.consultations));
这听上去肯定像是在修改咨询时会发生的行为。你能发布reducer代码吗?我已经把它添加到我的问题中了。我觉得没问题。你看到什么了吗?我将prevProps和prevState与this.props和this.state进行了比较。这表明他们是平等的!这怎么可能?那么为什么还要调用ComponentDidUpdate呢?我快疯了!感谢TLadd的帮助。问题是关于改变原始对象。我已经发布了解决方案。谢谢你为我指明了正确的方向@TLadd。谢谢你!