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
相关产品推荐
相关产品推荐

