Javascript 减法时获取reactJS中未定义的值

Javascript 减法时获取reactJS中未定义的值,javascript,reactjs,Javascript,Reactjs,我试图获取用户在提交文本之前开始键入的时间间隔。当他点击文本区域时,计时器启动并以秒为单位计算(小时*3600+分钟*60+秒)。当计时器单击submit时,计时器也将结束 现在我的问题是,当我尝试减去保存在this.state中的两个值时,即使我先将它们存储在var中,或者如果我执行this.setState(),我仍然会得到“undefined” overallTime(e){ this.setState({Time: this.state.StartTime - t

我试图获取用户在提交文本之前开始键入的时间间隔。当他点击文本区域时,计时器启动并以秒为单位计算(小时*3600+分钟*60+秒)。当计时器单击submit时,计时器也将结束

现在我的问题是,当我尝试减去保存在
this.state
中的两个值时,即使我先将它们存储在var中,或者如果我执行
this.setState()
,我仍然会得到“undefined”

    overallTime(e){
        this.setState({Time: this.state.StartTime - this.state.EndTime})
        console.log(this.state.Time)
    }

    onSubmit = (e) => {
        this.overallTime();
        var textinput = this.state.inputValue;
        var inputLength = textinput.length;
        var inputTime = this.state.Time;
        if(textinput === this.state.Content)
        {
            console.log(inputLength)
            var lps = inputLength / inputTime;
            this.setState({LettersPerSecond: lps})
            console.log(lps)
            this.setState({message: 'Your score is ' + this.state.LettersPerSecond + ' letters per second! Good job! Refresh the page for another try!'})
        }
        else
        {
            this.setState({message: 'Your input is incorrect, refresh the page and start again! Remember, you always learn from your failures, so never give up!'})
        }
    }

我建议重组如下:

overallTime(){
返回this.state.EndTime-this.state.StartTime;
}
onSubmit=(e)=>{
const totalTime=this.overallTime();
const textinput=this.state.inputValue;
常量inputLength=textinput.length;
if(textinput==this.state.Content){
const lps=输入长度/总时间;
这是我的国家({
信秒:lps,
消息:“你的分数是每秒'+lps+'个字母!干得好!刷新页面,再试一次!”
});
}否则{
这是我的国家({
信息:“您的输入不正确,请刷新页面,然后重新开始!记住,您总是从失败中吸取教训,所以永远不要放弃!”
})
}
}
为什么?
setState({Time:someValue});
//此时this.state.Time还没有新值
见–

还有一个小的逻辑错误–您需要执行
endTime-startTime
,而不是
startTime-endTime

您的
总体功能不完全正确–我认为您的意思是这样的:

overallTime(){
this.setState((状态)=>({
时间:state.EndTime-state.StartTime
});
}

我强烈建议您阅读React docs一节,它写得非常好。

我建议您这样重组:

overallTime(){
返回this.state.EndTime-this.state.StartTime;
}
onSubmit=(e)=>{
const totalTime=this.overallTime();
const textinput=this.state.inputValue;
常量inputLength=textinput.length;
if(textinput==this.state.Content){
const lps=输入长度/总时间;
这是我的国家({
信秒:lps,
消息:“你的分数是每秒'+lps+'个字母!干得好!刷新页面,再试一次!”
});
}否则{
这是我的国家({
信息:“您的输入不正确,请刷新页面,然后重新开始!记住,您总是从失败中吸取教训,所以永远不要放弃!”
})
}
}
为什么?
setState({Time:someValue});
//此时this.state.Time还没有新值
见–

还有一个小的逻辑错误–您需要执行
endTime-startTime
,而不是
startTime-endTime

您的
总体功能不完全正确–我认为您的意思是这样的:

overallTime(){
this.setState((状态)=>({
时间:state.EndTime-state.StartTime
});
}

我强烈建议您阅读React docs一节,它写得非常好。

您可以使用setState函数的回调函数。您将始终在回调函数中获得更新的状态

例如:

overallTime(e){
    this.setState({Time: this.state.StartTime - this.state.EndTime}, 
     () => console.log(this.state.Time))  
}

您可以使用setState函数的回调函数。您将始终在回调函数中获得更新的状态

例如:

overallTime(e){
    this.setState({Time: this.state.StartTime - this.state.EndTime}, 
     () => console.log(this.state.Time))  
}


你在
setState
内部调用
setState
这似乎不对,我在看到另一篇文章后尝试过这样做,但没有成功。忘了把它改回来,现在我编辑了这篇文章。谢谢你让
overallTime
绑定到组件上了吗?是的。我需要将它称为
this.overallTime
而不是
th吗is.overallTime()
?你能分享剩下的代码或代码沙盒吗?你在
setState
内部调用
setState
,这似乎不对。我在SO上看到另一篇帖子后尝试过这样做,但没有成功。忘了更改它,现在我编辑了帖子。谢谢你让
一直绑定到组件上了吗?是的。我需要c吗所有这些都是作为
this.overallTime
而不是
this.overallTime()
?你能分享剩下的代码或代码沙盒吗?谢谢你的教程。是的,结束时间已设置。op上的评论中有一个codesandbox链接。我现在正在使用你提供的代码,但我仍然得到
lps
的NaN值。这是更新的代码,我使用了你的代码片段。你看到
NaN
是因为我的
总时间
函数中有一个输入错误–它说的是
开始时间
,而不是
开始时间
。此外,在看到您的代码沙盒后,我的代码片段并不是100%适合您的代码,您需要进行一些调整以使其全部正常工作。但是它很接近了!您可以做到!是的!现在它可以与
开始时间
!仍然是rEturn的值为1.06e-10,但它有点不对劲!谢谢!你得到了这个奇怪的数字,因为最初我假设你是在用时间计算时间。(我建议你这样做——这可能是最常见的方法,比按小时、分、秒计算更简单)。我编辑了代码段以反映您的代码。感谢您提供的教程。是的,结束时间已设置。op上的评论中有一个codesandbox链接。我现在使用您提供的代码,但我仍然得到
lps
的NaN值。这是更新的代码,我在其中使用了您的代码段。您看到
NaN
是因为有一个错误po在我的
全天
函数中–它说的是
startTime
,而不是
startTime
。另外,在看到你的代码沙盒后,我的代码片段并不是100%适合你的代码,你需要进行一些调整,以使其全部正常工作。但它很接近!你可以做到!是的!现在它可以与
startTime
一起工作!仍然返回一个值1.06e-10,但它会去某个地方!谢谢!你得到了那个奇怪的数字,因为最初我以为你在用时间计算。(我建议你这样做。)