我现在很困惑。我在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)
});
}
}
如果我使用
调用alterHandleronChange={(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
是'local',情况“ db”仍在触发!
在广泛的体育世界中,这里正在发生什么?
答案 0 :(得分:1)
请查看switch
documentation on MDN。具体来说,本节:
与每个case标签关联的可选
break
语句可确保一旦执行了匹配的语句,程序便会退出切换,并在切换后的语句处继续执行。如果省略break
,则程序将在switch语句中的下一个语句处继续执行。
因此,如果您不执行t add a
中断clause, the program will not exit the
开关scope and the
默认操作,因为它不知道子句已经匹配。
答案 1 :(得分:0)
使用switch语句创建case
时,switch将遍历所有个案,直到找到正确的个案为止。一旦发现这种情况,它将从那里开始执行代码。问题在于,除非您break
退出switch语句,否则它只会继续处理其他情况。
在您的switch语句中
switch (profileType){
case 'local':
它在本地执行所有操作,然后继续执行db,因为您没有break;
。