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




