You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React文件中使用Switch语句出现Expression Expected错误求助

解决React中switch语句的"Expression Expected"错误

嘿,我一眼就瞅出问题啦!你遇到的这个错误,核心原因是JSX的花括号{}里只能放表达式,而switch是一个语句(statement),不是表达式,所以React编译器会报错说"Expected Expression"。

而且你的代码里还有个小语法错误:case "name3"那行里的<<SelectBox/>;/>>明显是手滑打错了,得改成return <SelectBox/>;

下面给你两种靠谱的修复方案:

方案一:提取成单独的渲染函数(推荐,代码更清晰易维护)

把switch逻辑抽成一个独立的函数,在JSX里调用这个函数就行,这样代码结构更清爽:

export default ({ handle, state }) => {
  // 提取渲染输入组件的函数
  const renderInputComponent = (item) => {
    switch(item.name) {
      case "name1":
        return <InputBox/>;
      case "name2":
        return <SelectBox/>;
      case "name3":
        return <SelectBox/>; // 修正了语法错误
      default:
        return <InputBox/>;
    }
  };

  return (
    <div style={styles.container}>
      <h3 style={{margin: 0, marginBottom: 15}}>InputData</h3>
      {items.map((item) => (
        <div style={styles.lineContainer}>
          {renderInputComponent(item)} {/* 调用函数,这是表达式 */}
        </div>
      ))}
    </div>
  );
};

方案二:用立即执行函数表达式(IIFE)包裹switch语句

如果不想单独写函数,也可以用IIFE把switch语句包起来,因为函数调用是表达式,能放在JSX的{}里:

export default ({ handle, state }) => (
  <div style={styles.container}>
    <h3 style={{margin: 0, marginBottom: 15}}>InputData</h3>
    {items.map((item) => (
      <div style={styles.lineContainer}>
        {(() => { // 用IIFE包裹switch
          switch(item.name) {
            case "name1":
              return <InputBox/>;
            case "name2":
              return <SelectBox/>;
            case "name3":
              return <SelectBox/>; // 修正语法错误
            default:
              return <InputBox/>;
          }
        })()}
      </div>
    ))}
  </div>
);

两种方案都能解决你的问题,个人更推荐第一种,因为代码可读性更高,后续维护也方便~

内容的提问来源于stack exchange,提问作者JokerBean

火山引擎 最新活动