首页 > 解决方案 > Javascript Switch 语句损坏?

问题描述

我现在很困惑。我在 React 中有一个简单的 switch 语句,它行为不端,我不知道为什么。

看一下这个:

alterHandler(keyName, value, profileType){
    const newState = Object.assign({}, this.state);
    console.log('inside alterHandler in Profile')
    console.log('value of profileType: ', profileType)
    console.log('profileType equals local: ', profileType=='local')
    console.log('profileType equals db: ', profileType=='db')
    switch (profileType){
      case 'local':
        console.log('23235235235123523t2346 case local')
        newState['local'][keyName] = value;
      case 'db':
        console.log('23235235235123523t2346 case db')
        newState['db'][keyName] = value;
      case 'n/a':
        newState[keyName] = value;
      default:
        if(keyName=='animalType'){
          newState['showForward'] = true;
        }
        this.setState(newState, ()=>{
          console.log('after setting state in alterHandler 
          in Profile and value: ', this.state)
        });
    }
  }

如果我用

onChange={(e)=>{this.props.alterHandler('personalName', e.target.value, 'local')}} 

在输入语句中,

我得到以下输出:

 value of profileType:  local index.js:216
 profileType equals local:  true index.js:217
 profileType equals db:     false index.js:218
 case local index.js:221
 case db  index.js:224

因此,即使profileType是“本地”,案例“db”也会触发!

在广阔的体育世界里发生了什么?

标签: javascriptreactjsswitch-statement

解决方案


请查看switchMDN 上的文档。具体来说,本节:

与每个 case 标签关联的可选break语句确保程序在执行匹配的语句后跳出 switch,并在 switch 后面的语句处继续执行。如果break省略,则程序继续执行 switch 语句中的下一条语句。

因此,如果您不t add a中断clause, the program will not exit theswitch scope and thedefault` 操作,它将运行,因为它不知道子句已经匹配。


推荐阅读