React Native Expo计算器计算后backspace()报错:undefined is not a function
问题:React Native Expo计算器退格功能报错“undefined is not a function”
计算出结果后点击退格按钮调用backspace()函数时,会触发undefined is not a function错误,问题出在代码第91行setCalcText(calcText.slice(0, -1))。
错误原因
核心问题是**calcText的类型不一致**:
- 初始状态和输入数字/符号时,
calcText是字符串类型; - 调用
calculateResult()时,eval(resultText)返回的是数字类型,直接赋值给calcText后,它变成了数字; - 数字类型没有
slice()方法,所以退格时调用calcText.slice()会抛出“undefined is not a function”错误。
修复方案
1. 确保计算结果转为字符串
修改calculateResult函数,将eval的结果转为字符串后再设置给calcText:
const calculateResult = () => { try { // 将计算结果转为字符串,保证calcText始终为字符串类型 setCalcText(String(eval(resultText))); } catch(err){ alert(err) } };
2. 完善退格函数的边界处理
修改backspace函数,处理退格后文本为空的情况,同时确保操作的是字符串:
const backspace = () => { if (calcText === "0") return; // 处理calcText退格,空值时设为"0" const newCalcText = calcText.slice(0, -1) || "0"; setCalcText(newCalcText); // 处理resultText退格,空值时设为空字符串 const newResultText = resultText.slice(0, -1) || ""; setResultText(newResultText); };
3. 额外检查其他状态赋值
确认其他设置calcText的地方都使用字符串类型,比如memoryRecall中setCalcText(memory),因为memory在memoryPlus和memoryMinus里已经通过String()转换为字符串,所以无需修改。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

