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

React计算器功能异常+npm初始化故障,请求代码排查协助

React计算器应用错误排查及修复

以下是代码中存在的关键错误及修复方案:

核心语法与拼写错误

  • Hook调用格式错误:useRef{null}、useState{0}需改为useRef(null)、useState(0),React Hook调用必须使用小括号而非大括号。
  • 箭头函数参数格式错误:const plus = {e} => {需改为const plus = (e) => {,箭头函数参数必须用小括号包裹。
  • 拼写失误:
    • inputRef.current.vaule → inputRef.current.value(单词拼写错误)
    • reutrn → return(返回语句拼写错误)
    • resetResult函数中preVale → preVal(参数名不一致)

逻辑与显示问题

  • 结果未实时渲染:原代码中<p ref={resultRef}>result</p>仅显示固定文本,需改为<p>{result}</p>来展示实时计算结果,resultRef无实际用途可移除。
  • 重置函数冗余逻辑:setResult((preVal => preVale * 0))可简化为setResult(0),直接重置结果为0更清晰。
  • 组件缺失导出:原代码末尾没有export default App;,导致组件无法被正确引入,必须添加。

修复后的完整代码

import { useRef, useState } from "react";
import "./App.css";

function App() {
    const inputRef = useRef(null);
    const [result, setResult] = useState(0);

    const plus = (e) => {
        e.preventDefault();
        setResult((prevResult) => prevResult + Number(inputRef.current.value));
    };

    const minus = (e) => {
        e.preventDefault();
        setResult((prevResult) => prevResult - Number(inputRef.current.value));
    };

    const times = (e) => {
        e.preventDefault();
        setResult((prevResult) => prevResult * Number(inputRef.current.value));
    };

    const divide = (e) => {
        e.preventDefault();
        setResult((prevResult) => prevResult / Number(inputRef.current.value));
    };

    const resetInput = (e) => {
        e.preventDefault();
        inputRef.current.value = "";
    };

    const resetResult = (e) => {
        e.preventDefault();
        setResult(0);
    };

    return (
        <div className="App">
            <div>
                <h1>Simplest Working Calculator</h1>
            </div>
            <form>
                <p>Result: {result}</p>
                <input
                    pattern="[0-9]*"
                    ref={inputRef}
                    type="number"
                    placeholder="Type a number"
                />
                <button onClick={plus}>add</button>
                <button onClick={minus}>subtract</button>
                <button onClick={times}>multiply</button>
                <button onClick={divide}>divide</button>
                <button onClick={resetInput}>reset input</button>
                <button onClick={resetResult}>reset result</button>
            </form>
        </div>
    );
}

export default App;

额外优化点:

  • resetInput中将输入框值设为""比0更符合数字输入框的默认空状态
  • pattern="[0-9]"改为pattern="[0-9]*"以支持多位数输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:07:42