Switch 总是命中 Default Case JS

Switch always hits Default Case JS

我有一个非常简单的开关块,我有一组非常严格的选项可以放入其中。开关块如下...

const handleOption = (option) => {
        setSortBy(option)
        switch (option){
            case("DAR"):
                setTitle('Delivered and Recieved')
            case('DCR'):
                setTitle('Delivery Completion Rate')
            case('POD'):
                setTitle('Photo on Delivery Rate')
            case('CC'):
                setTitle('Call Compliance')
            case('SC'):
                setTitle('Scan Compliance')
            case('FICO'):
                setTitle('FICO')
            case('cdf'):
                setTitle('Customer Feedback')
            default:
                console.log(option)
                setTitle(option)
        }
        setTitle(option)
    }

如您所见,我在默认情况下有一个 console.log 语句。每当有任何东西进入这个函数表达式时,它都会达到默认值并被记录下来。到目前为止,我已经记录了所有可能的案例选项,因为每一个都达到了默认值。意思是,'DAR''DCR''POD',其余所有。我当然不是 Switch 机箱的专家,我很少使用它们,但这主要是因为这个确切的问题总是会发生,我不知道为什么也不知道在哪里可以找到答案

每个 case 完成后,您需要一个 break 语句。

const handleOption = (option) => {
  setSortBy(option)
  switch (option) {
    case ("DAR"):
      setTitle('Delivered and Recieved');
      break;
    case ('DCR'):
      setTitle('Delivery Completion Rate');
      break;
    case ('POD'):
      setTitle('Photo on Delivery Rate');
      break;
    case ('CC'):
      setTitle('Call Compliance');
      break;
    case ('SC'):
      setTitle('Scan Compliance');
      break;
    case ('FICO'):
      setTitle('FICO');
      break;
    case ('cdf'):
      setTitle('Customer Feedback');
      break;
    default:
      console.log(option)
      setTitle(option)
  }
  setTitle(option)
}

您可以构建一个小字典对象,然后使用键引用值,而不是使用 switch。它不那么笨重。

const obj = {
  DAR: 'Delivered and Recieved',
  DCR: 'Delivery Completion Rate'
};

function setTitle(data) {
  console.log(data);
}

function handleOption(option) {
  setTitle(obj[option]);
}

handleOption('DAR');
handleOption('DCR');