2017-02-15 48 views
-3

我有以下代码:switch语句不改变为不同的变量

enter image description here

refreshTableOnTabChange(selectedIndex) { 
     console.log("inside refreshTableOnTabChange"); 
     let level = ''; 
    // if (selectedIndex == 1){ 
    //  this.setState({level: 'day'}) 
    //  this.setState({tabIndex: 1}) 
    //  level = 'day'; 
    // } 
    // else if (selectedIndex == 2) { 
    //  this.setState({level: 'hour'}) 
    //  this.setState({tabIndex: 2}) 
    //  level = 'hour'; 
    // } 
    // else if (selectedIndex == 3) { 
    //  this.setState({level: 'minute'}) 
    //  this.setState({tabIndex: 3}) 
    //  level = 'minute'; 
    // } 
     console.log(selectedIndex); 
     switch (selectedIndex) { 
      case 1: 
      level = 'day'; 
      case 2: 
      level = 'hour'; 
      case 3: 
      level = 'minute'; 
     } 
     console.log(level); 
     this.setState({tabIndex: selectedIndex, level: level}); 

以下https://www.w3schools.com/js/js_switch.asp

我得到一个奇怪的结果,在每一次它去分钟后

+5

这是最常见的所有时间的“开关”问题。你可能是十亿分之一的人要问关于“你忘了使用break”的答案。恭喜,这是你的气球。 –

+0

我想我15年前就有过这个问题@ChrisG。我可以追溯到一个气球吗? ':-)' – halfer

回答

3

您应该在每个案例的结尾处明确使用语句break。 JavaScript中的Switch语句有一个下降的行为。由于这是规定更正式here:每个case标签相关

可选break语句确保 该程序跳出开关一次匹配的说法是 执行,并在下面的开关语句继续执行。 如果 休息省略,该程序在switch语句中的下一个 声明将继续执行

所以,你必须改变你切换,如下声明IKE:

switch (selectedIndex) { 
    case 1: 
     level = 'day'; 
     break; 
    case 2: 
     level = 'hour'; 
     break; 
    case 3: 
     level = 'minute'; 
     break; 
} 
+0

Ty。尽管如此,我仍然感到困惑,为什么有'case',如果匹配'case'不会结束交换? – codyc4321