Javascript 减法时获取reactJS中未定义的值
我试图获取用户在提交文本之前开始键入的时间间隔。当他点击文本区域时,计时器启动并以秒为单位计算(小时*3600+分钟*60+秒)。当计时器单击submit时,计时器也将结束 现在我的问题是,当我尝试减去保存在Javascript 减法时获取reactJS中未定义的值,javascript,reactjs,Javascript,Reactjs,我试图获取用户在提交文本之前开始键入的时间间隔。当他点击文本区域时,计时器启动并以秒为单位计算(小时*3600+分钟*60+秒)。当计时器单击submit时,计时器也将结束 现在我的问题是,当我尝试减去保存在this.state中的两个值时,即使我先将它们存储在var中,或者如果我执行this.setState(),我仍然会得到“undefined” overallTime(e){ this.setState({Time: this.state.StartTime - t
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,但它会去某个地方!谢谢!你得到了那个奇怪的数字,因为最初我以为你在用时间计算。(我建议你这样做。)