Javascript 国际单项体育联合会更改最终结果的命令
这两段看似相同的代码给了我截然不同的结果。 第一个获取与sessionUserInput匹配的计时器:Javascript 国际单项体育联合会更改最终结果的命令,javascript,reactjs,Javascript,Reactjs,这两段看似相同的代码给了我截然不同的结果。 第一个获取与sessionUserInput匹配的计时器: handleSession(event){ const id= event.target.id; let breakvar= this.state.breakSession; let sessionvar= this.state.session; let isPaused=this.state.isPaused; let intervalBegan=th
handleSession(event){
const id= event.target.id;
let breakvar= this.state.breakSession;
let sessionvar= this.state.session;
let isPaused=this.state.isPaused;
let intervalBegan=this.state.intervalBegan;
let sessionUserInput=this.state.session;
if(isPaused && id==="break-increment" && breakvar<=59){
this.setState((state) => ({
breakSession: this.state.breakSession +1,
breakValue:this.state.breakValue + 60}))}
else if (isPaused && id==="break-decrement" && breakvar>1){
this.setState((state) => ({
breakSession: this.state.breakSession -1,
breakValue:this.state.breakValue - 60}))}
else if(isPaused && id==="session-increment" && sessionvar <=59){
this.setState((state) => ({
session: this.state.session +1,
timer: this.state.timer + 60}))}
else if (isPaused && id==="session-decrement" && sessionvar>1){
this.setState((state) => ({
session: this.state.session -1,
timer:this.state.timer - 60}))}
if(isPaused && intervalBegan && id==="session-decrement"){
this.setState((state) => ({
timer: (sessionUserInput * 60) - 60,
intervalBegan: false}))}
else if(isPaused && intervalBegan && id==="session-increment"){
this.setState((state) => ({
timer: (sessionUserInput * 60) + 60,
intervalBegan: false}))}
else if(id === "reset"){
clearInterval(this.Interval);
this.setState((state) => ({
session: 25,
timer: 1500,
breakSession: 5,
breakValue:300,
isPaused: true
}))
}}
而这一个,虽然更整洁,使计时器正好比计时器小一分钟:
handleSession(event){
const id= event.target.id;
let breakvar= this.state.breakSession;
let sessionvar= this.state.session;
let isPaused=this.state.isPaused;
let intervalBegan=this.state.intervalBegan;
let sessionUserInput=this.state.session;
if(isPaused && intervalBegan && id==="session-increment"){
this.setState((state) => ({
timer: (sessionUserInput * 60) + 60,
intervalBegan: false}))}
else if(isPaused && intervalBegan && id==="session-decrement"){
this.setState((state) => ({
timer: (sessionUserInput * 60) - 60,
intervalBegan: false}))}
else if(isPaused && intervalBegan && id==="session-increment"){
this.setState((state) => ({
timer: (sessionUserInput * 60) + 60,
intervalBegan: false}))}
else if(isPaused && id==="break-increment" && breakvar<=59){
this.setState((state) => ({
breakSession: this.state.breakSession +1,
breakValue:this.state.breakValue + 60}))}
else if (isPaused && id==="break-decrement" && breakvar>1){
this.setState((state) => ({
breakSession: this.state.breakSession -1,
breakValue:this.state.breakValue - 60}))}
else if(isPaused && id==="session-increment" && sessionvar <=59){
this.setState((state) => ({
session: this.state.session +1,
timer: this.state.timer + 60}))}
else if (isPaused && id==="session-decrement" && sessionvar>1){
this.setState((state) => ({
session: this.state.session -1,
timer:this.state.timer - 60}))}
else if(id === "reset"){
clearInterval(this.Interval);
this.setState((state) => ({
session: 25,
timer: 1500,
breakSession: 5,
breakValue:300,
isPaused: true
}))
}}
我真的看不出两者之间的区别:在我看来,支票的顺序和质量是一样的。对造成这种差异的原因有什么看法?这合乎逻辑吗?因为这里有这么多变量,很难准确地说出结果差异的原因。但这里有一些事情需要注意 一,。 首先,两个代码示例中的条件顺序不同。由于各种条件并非都是相互排斥的,至少就我对您的应用程序了解有限的情况而言,在使用else-if语句时,更改条件的顺序可能会改变结果。这是因为只有计算结果为true的第一个条件下的代码才会被执行,因此,如果两个条件为true,并且顺序被交换,那么结果将改变 例如:
const a = true;
const b = false;
// 1.
if (a) {
console.log("a only");
} else if (a || b) {
console.log("a or b");
}
// 2.
if (a || b) {
console.log("a or b");
} else if (a) {
console.log("a only");
}
const a = true;
const b = false;
// 1.
if (a) {
console.log("a only");
} else if (a || b) {
console.log("a or b");
}
// 2.
if (a) {
console.log("a only");
}
if (a || b) {
console.log("a or b");
}
在第一个示例中,只记录了a,但在第二个示例中记录了a或b,结果的差异只是由于翻转了条件的顺序
二,。
其次,第一个示例使用两个单独的if/else语句,而第二个示例仅使用一个。因此,在前两个条件中,可以计算为true并执行它们的代码,而在第二个示例中,将只执行一个true条件的代码
例如:
const a = true;
const b = false;
// 1.
if (a) {
console.log("a only");
} else if (a || b) {
console.log("a or b");
}
// 2.
if (a || b) {
console.log("a or b");
} else if (a) {
console.log("a only");
}
const a = true;
const b = false;
// 1.
if (a) {
console.log("a only");
} else if (a || b) {
console.log("a or b");
}
// 2.
if (a) {
console.log("a only");
}
if (a || b) {
console.log("a or b");
}
在第一个示例中,只记录a only,而在第二个示例中,同时记录a only和a或b。您在dev tools中调试过这段代码吗?这是找到这个的最快方法。如果你需要帮助的话,在操场上放一个简单的解决方案。好吧,那么-我至少可以帮你。这是React编辑器,允许您在线创建完整的React应用程序。在这里找到它: