Javascript 处于react componentDidUpdate未更新状态
我需要用组件中的道具更新我的状态(Javascript 处于react componentDidUpdate未更新状态,javascript,reactjs,Javascript,Reactjs,我需要用组件中的道具更新我的状态(start_date),但是setState没有更新我的状态。相反,我得到的值是undefined 以下是我在代码中所做的操作: constructor(props) { super(props); this.state = { start_date: '' }; } componentDidUpdate(prevProps, prevState) { console.log("prevProps ", prevProps) con
start_date
),但是setState
没有更新我的状态。相反,我得到的值是undefined
以下是我在代码中所做的操作:
constructor(props) {
super(props);
this.state = {
start_date: ''
};
}
componentDidUpdate(prevProps, prevState) {
console.log("prevProps ", prevProps)
console.log("prevState ", prevState)
if (prevProps.currentRelease != prevState.currentRelease) {
console.log("Inside componentDidUpdate ")
this.setState({
// start_date: prevProps.currentRelease.start
});
}
}
这是我的数据的屏幕截图,它来自父组件,将数据传递给子组件:
我需要用currentRelease更新
start\u date
状态。start(红色框)我建议这样做。而不是componentdiddupdate
static getDerivedStateFromProps(props, state) {
const { currentRelease } = props;
if(currentRelease && currentRelease.start) {
return { start_date: props.currentRelease.start }
}
return null;
}
参考资料:我建议这样做。而不是
componentdiddupdate
static getDerivedStateFromProps(props, state) {
const { currentRelease } = props;
if(currentRelease && currentRelease.start) {
return { start_date: props.currentRelease.start }
}
return null;
}
参考资料:问题是,您正在使用
prevProps
更新状态(使用旧的)
您应该使用this.props
(当前)props实例prevProps
:
正确的代码:
this.setState({
// start_date: this.props.currentRelease.start
});
您的错误代码:
this.setState({
// start_date: prevProps.currentRelease.start
});
在您的代码中,我用
替换了prevProps
,问题是,您正在用prevProps
更新状态(使用旧的)
您应该使用this.props
(当前)props实例prevProps
:
正确的代码:
this.setState({
// start_date: this.props.currentRelease.start
});
您的错误代码:
this.setState({
// start_date: prevProps.currentRelease.start
});
在您的代码中,我将prevProps
替换为this.props
如果您登录prevProps.currentRelease.start
,您会得到什么?如果我的控制台日志prevProps.currentRelease.start
,那么我可以看到控制台上打印的2018年8月3日
。但是,当我使用它来更新状态时,我的代码就失败了。为什么不直接使用this.props.currentRelease.start
而不是this.state.start\u date
?而且您知道console.log
是“懒惰”的,因为它在显示值时计算,而不是在“记录”值时计算?因此,当console.log
运行时,该值可能未定义,一秒钟后在调试控制台中计算并打印其值时,该值可能为“8/3/2018”?这是console.log(“内部组件更新”)
被记录?如果你记录prevProps.currentRelease.start
,你会得到什么?如果我在控制台上记录prevProps.currentRelease.start
,那么我可以看到控制台上打印的2018年8月3日
。但是,当我使用它来更新状态时,我的代码就失败了。为什么不直接使用this.props.currentRelease.start
而不是this.state.start\u date
?而且您知道console.log
是“懒惰”的,因为它在显示值时计算,而不是在“记录”值时计算?因此,当console.log
运行时,该值可能未定义,一秒钟后在调试控制台中计算并打印其值时,该值可能为“8/3/2018”?这是console.log(“内部组件更新”)
正在被记录?如果props.currentRelease.start
丢失或等于状态,您忘记返回null
。开始日期
@streletss哈哈。。。我搞错了…(静态功能…)谢谢。。!如果props.currentRelease.start
缺失或等于状态,则忘记返回null
。开始日期
@streletss哈哈。。。我搞错了…(静态功能…)谢谢。。!