You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何使用switch case?为何提示case为禁用词?

React计算器switch case问题解决及替代方案

一、你的switch语法本身没问题,但代码存在变量名错误

你定义的变量是firstNum和secondNum,但计算时误写为firstNumber和secondNumber,这会导致结果res为undefined。修正后的switch case代码如下:

const Calculatorpage = () => {
    function calculate() {
        const firstNum = Number(document.getElementById('firstNum').value)
        const secondNum = Number(document.getElementById('secondNum').value)
        const symbol = document.getElementById('symbol').value
        const result = document.getElementById('result')
        console.log("im in");
        let res
        switch (symbol) {
            case "+": 
                res = firstNum + secondNum;
                break;
            case "-":
                res = firstNum - secondNum;
                break;
            case "*":
                res = firstNum * secondNum;
                break;
            case "/":
                res = secondNum !== 0 ? firstNum / secondNum : "不能除以0";
                break;
            default:
                res = "请输入有效运算符";
                break;
        }
        result.value = res;
    }

    return (
        <div>
            <input id="firstNum" type="number" />
            <input id="symbol" placeholder="+" type="text" /> {/* 注意:没有type="symbol",改用text类型 */}
            <input id="secondNum" type="number" />
            <input id="result" type="text" /> {/* 除法可能出现非数字结果,改用text更合适 */}
            <button type="button" onClick={calculate}>Go</button> {/* 无需submit类型,用button即可 */}
        </div>
    )
}

二、关于“case是禁用词”的提示

如果代码检查工具(比如ESLint)提示case禁用,大概率是启用了no-case-declarations规则(禁止在case块内直接声明变量),但你的代码只是赋值操作,并不违反规则。如果确实遇到规则限制,可以给case块套上大括号:

switch (symbol) {
    case "+": {
        res = firstNum + secondNum;
        break;
    }
    // 其他case同理
}

三、替代switch case的方案(无需if else)

如果你不想用switch,推荐用对象映射的方式,代码更简洁易维护:

const Calculatorpage = () => {
    function calculate() {
        const firstNum = Number(document.getElementById('firstNum').value)
        const secondNum = Number(document.getElementById('secondNum').value)
        const symbol = document.getElementById('symbol').value
        const result = document.getElementById('result')
        
        const calcMap = {
            "+": () => firstNum + secondNum,
            "-": () => firstNum - secondNum,
            "*": () => firstNum * secondNum,
            "/": () => secondNum !== 0 ? firstNum / secondNum : "不能除以0"
        };
        
        // 执行计算,默认返回提示信息
        const res = calcMap[symbol] ? calcMap[symbol]() : "请输入有效运算符";
        result.value = res;
    }

    return (
        <div>
            <input id="firstNum" type="number" />
            <input id="symbol" placeholder="+" type="text" />
            <input id="secondNum" type="number" />
            <input id="result" type="text" />
            <button type="button" onClick={calculate}>Go</button>
        </div>
    )
}

额外优化提示

React中不推荐用document.getElementById获取DOM元素,建议使用useRef钩子更符合React的状态管理逻辑:

import { useRef } from 'react';

const Calculatorpage = () => {
    const firstNumRef = useRef(null);
    const secondNumRef = useRef(null);
    const symbolRef = useRef(null);
    const resultRef = useRef(null);

    function calculate() {
        const firstNum = Number(firstNumRef.current.value);
        const secondNum = Number(secondNumRef.current.value);
        const symbol = symbolRef.current.value;
        // ... 计算逻辑同上
        resultRef.current.value = res;
    }

    return (
        <div>
            <input ref={firstNumRef} type="number" />
            <input ref={symbolRef} placeholder="+" type="text" />
            <input ref={secondNumRef} type="number" />
            <input ref={resultRef} type="text" />
            <button type="button" onClick={calculate}>Go</button>
        </div>
    )
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:37:43