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哈哈。。。我搞错了…(静态功能…)谢谢。。!