Javascript 国际单项体育联合会更改最终结果的命令

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

这两段看似相同的代码给了我截然不同的结果。 第一个获取与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=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应用程序。在这里找到它: