React:状态对象属性未更新

时间:2019-08-19 11:02:26

标签: javascript reactjs ecmascript-6

我正在尝试更新我的状态,但是与此同时,当我在控制台中控制台更新状态值时,它会提示我您的状态值为undefined。有人可以帮助我解决这个问题。我正在使用rc-time-picker来选择时间并将所选时间存储在本地存储中,但是它没有更新状态值 谢谢

代码

import 'rc-time-picker/assets/index.css';
import React, { Component } from 'react';

import TimePicker from 'rc-time-picker';
import moment from 'moment';

const format = 'h:mm a';



const now = moment().hour(0).minute(0);

class Time extends Component {

  constructor(){
    super();
    this.state={
      value : ''
    }
  }

  newHandleChange=(value)=>{
    this.setState({
        value:   localStorage.setItem("currentTime",value.format('h:mm a'))
    })

}
  render(){
    console.log("state data",this.state.value)

    return(
      <div>
           <TimePicker
                  showSecond={false}
                  defaultValue={now}
                  className="xxx"
                  onChange={this.newHandleChange}
                  format={format}
                  use12Hours
                  inputReadOnly
                  fieldName="time"
                />
      </div>
    )
  }
}

export default Time;

4 个答案:

答案 0 :(得分:2)

获取undefined的原因是因为您正在使用通过调用localStorage.setItem返回的值undefined来设置新状态。

这是您需要做的:

class Time extends Component {
  constructor(props) {
    super(props)
    this.state = { value: '' }
  }

  // ...

  newHandleChange = (value) => {
    const time = value.format('h:mm a')

    localStorage.setItem('currentTime', time)
    this.setState({
      value: time
    })
  }
}

这样,您可以将新时间保存到变量中,并使用它来更新组件{{1}中的currentValue和组件中的localStorage

答案 1 :(得分:1)

state中初始化constructor时,应将props传递给super

  constructor(props){
    super(props);
    this.state={
      value : ''
    }
  }

您获得的undefined仅仅是getItem()的结果

答案 2 :(得分:-1)

您需要为状态设置适当的值,请检查以下代码

state

答案 3 :(得分:-1)

尝试使用此`

newHandleChange =val=> {
const value=localStorage.setItem('currentTime', val.format('h:mm a'))

    this.setState({
      value
    })
  }`

查看此应用https://codesandbox.io/s/competent-bohr-6jon1