javascript - My Balance States Throws Balance.map 不是函数错误?
问题描述
我正在制作一个简单的 React 应用程序来跟踪费用、收入和余额。我正在使用一个名为 Balance 的状态挂钩,它是所有输入状态的总和。问题是 React 抛出 Balance.map 不是函数。因此,当用户输入所有输入时,我无法显示总数。
这是完整的代码:
export default function App() {
const [Balance, setBalance] = useState([]);
const [Income, setIncome] = useState(0);
const [Expense, setExpense] = useState(0);
const [Input, setInput] = useState([]);
console.log(typeof Balance);
const handleChange = (e) => {
setInput(e.target.value);
};
const handleClick = (e) => {
e.preventDefault();
if (Input > 0) {
setIncome(Input);
} else {
setExpense(Input);
}
let val = parseInt(Input);
setBalance(val, ...Balance);
//console.log(...Balance);
setInput("");
};
return (
<div style={{ textAlign: "center", marginTop: "150px" }}>
<form>
<label htmlFor="input"> Please enter value: </label>
<input
name="input"
type="number"
value={Input}
onChange={handleChange}
/>
<button onClick={handleClick}> Submit</button>
</form>
<br />
<h3> My Balance:</h3>
<p>
{Balance.map((i) => {
return i;
})}
</p>
<h3> My Income: {Income}</h3>
<h3> My Expense: {Expense}</h3>
</div>
);
}
我知道 Balance 状态,尽管它被设置为一个数组,仍然是一个对象。我假设错误来自那里?如果是这样,应该 setBalance(...Input) 工作吗?
解决方案
正如用户在评论中所说,问题在于您更新 Balance 值的方式,这里我在这些地方进行了一些更改:
let val = parseInt(Input, 10); // Here I add the base of parseInt
setBalance([...Balance, val]) Here I let the value as an array in the setBalance
完整的代码是:
import React, {useState} from "react";
import "./styles.css";
export default function App() {
const [Balance, setBalance] = useState([]);
const [Income, setIncome] = useState(0);
const [Expense, setExpense] = useState(0);
const [Input, setInput] = useState([]);
console.log(typeof Balance);
const handleChange = (e) => {
setInput(e.target.value);
};
const handleClick = (e) => {
e.preventDefault();
if (Input > 0) {
setIncome(Input);
} else {
setExpense(Input);
}
let val = parseInt(Input, 10);
setBalance([...Balance, val]);
//console.log(...Balance);
setInput("");
};
return (
<div style={{ textAlign: "center", marginTop: "150px" }}>
<form>
<label htmlFor="input"> Please enter value: </label>
<input
name="input"
type="number"
value={Input}
onChange={handleChange}
/>
<button onClick={handleClick}> Submit</button>
</form>
<br />
<h3> My Balance:</h3>
<p>
{Balance.map((i) => {
return i;
})}
</p>
<h3> My Income: {Income}</h3>
<h3> My Expense: {Expense}</h3>
</div>
);
}
推荐阅读
- javascript - 基于布尔属性值减少 JavaScrip 对象数组
- regex - 普罗米修斯 + snmp_exporter 正则表达式
- python - 为什么我在这里收到 WinError 10061(连接被拒绝)?
- java - 无法在 android studio 中配置 JSON
- java - 有没有办法只重新渲染在 java AWT Canvas 中更改了值的对象?
- matplotlib - Matplotlib 以前缩放时不方便“重置为原始视图”
- awk - awk 逻辑运算符
- .htaccess - 仅在 .php 文件扩展名中添加斜杠
- spring - 如何避免 Spring WebFlux 过滤器被调用两次?
- javascript - 正则表达式使用单个尾随可选 * 验证逗号分隔的字符串,但不允许试用逗号