我正在尝试更新状态 "Experience" 但我没有获得更新值。如果我的代码有误,请更正

Iam trying to update the state "Experience" but I didn't get updated value. please correct if my code is wrong

我正在尝试计算经验年份,因此我将状态“Experience = 0”初始化并将当前年份初始化为“currentDt”状态

    constructor(props){
    super(props);
    this.state = {
        CurrentDt : new Date().getFullYear(),
        DOJ : 0,
        Experience : 0
    }
}

获取“DOJ”状态的用户输入并使用 setstate() 进行更新

    GetJoiningDt = (event) =>{
    const DojValue = event.target.value;
   this.setState({
           DOJ :DojValue
       })
}

下面的代码用于减去 currentYear 和 DOJ 年份,然后尝试通过减去的值更新“体验”状态`

    calculateExperience = ()=>{
    alert("Inside_calculateExperience");
    let a = this.state.CurrentDt;
    let b = this.state.DOJ;
    var ExpValue = a - b;        //2021-2015
    alert(ExpValue);             // 6
    this.setState({
        Experience : ExpValue     //0
    })
}

当我提醒“ExpValue”的值时,它显示值 6 但在 setstate() 内部它更新 0。并将状态转换为 JSON。

    GetAsJSONData = () =>{
    console.log("JsonData");
    this.calculateExperience();
    let JsonData = {
        Experience : this.state.Experience
    }
    let showdata = JSON.stringify(JsonData);
    document.querySelector('label').textContent = showdata;
    document.write(showdata);

}


    render(){
    return(
        <form>
            <input type="text" value={this.state.DOJ} onChange= 
            {this.GetJoiningDt} placeholder="Year of DOJ" name="fullname" /> 
             <br/>  
            <button type="submit" onClick={this.GetAsJSONData}>Convert 
            Json</button><br></br>
            <label></label>
        </form>
    )
}

你需要考虑Async和Await。 我为你做了一个沙盒版本。 请检查下面的link

https://codesandbox.io/s/mystifying-water-9w238?file=/src/App.js

您需要防止页面在提交表单后重新加载,因为页面重新加载后反应状态会丢失。

<form id='form'>
<input type='text'>
<button type='submit'>submit</button>
</form>
<script>
    document.getElementById('form').onsubmit = e => {
        e.preventDefault();
    }
</script>

如果您不想这样做,请使用 localstorage 对象来存储您的状态,然后在提交表单后保留它。