【发布时间】:2022-01-11 19:36:50
【问题描述】:
我很抱歉大家打扰你..我是 reactjs 的新手,我真的不知道为什么每次我在我的功能组件中单击“X”按钮时都会在我的 map() 中添加新的空行,我的期望是当我单击“X”时按钮它只在我的控制台中记录我的东西。这里有没有人可以帮助解释正在发生的事情以及如何解决这个问题?下面我发布我的代码。请指教,非常感谢。
import './App.css';
import React, { useEffect, useState } from 'react';
import uniqid from 'uniqid';
function App() {
const [heldItems, setHeldItems] = useState({
salesno: '',
plu: '',
price: 0,
dateandtime: '',
});
const [salesItemsTemp, setSalesItemsTemp] = useState([]);
const handlerOnChange = (e) => {
let heldItemsTemp = { ...heldItems };
heldItemsTemp.salesno = uniqid();
heldItemsTemp[e.target.name] = e.target.value;
heldItemsTemp.dateandtime = new Date().toLocaleString();
console.log(heldItemsTemp);
setHeldItems(heldItemsTemp);
};
const handlerOnSubmit = (e) => {
e.preventDefault();
setSalesItemsTemp([...salesItemsTemp, { heldItems }]);
setHeldItems({
salesno: '',
plu: '',
price: 0,
dateandtime: '',
});
};
const handlerRemove = () => {
console.log('its from handlerRemove !');
};
useEffect(
() => console.log('helditems', heldItems),
[heldItems],
);
return (
<>
<form onSubmit={handlerOnSubmit} autoComplete="off">
<h1>POS</h1>
<input
type="text"
placeholder="Input item name"
name="plu"
onChange={handlerOnChange}
value={heldItems.plu}
/>
PLU
<input
type="number"
placeholder="Input item price"
name="price"
onChange={handlerOnChange}
value={heldItems.price}
/>
Price
<button type="submit">add item</button>
<div>
<ul>
{salesItemsTemp.map((sales) => {
console.log('mapping sales', sales);
const { salesno, plu, price, dateandtime } =
sales.heldItems;
return (
<li key={salesno}>
<p>salesno : {salesno}</p>
<p>plu : {plu}</p>
<p>price : {price}</p>
<p>dateandtime : {dateandtime}</p>
<button onClick={handlerRemove}>X</button>
</li>
);
})}
</ul>
</div>
</form>
</>
);
}
导出默认应用;
【问题讨论】:
-
快速问:即使将“按钮”更改为“跨度”也会发生这种情况吗?
-
“在地图中添加空行”是什么意思?
-
嘿,在你的方法
handlerRemove你是console.log的东西。那里没有逻辑 -
@JoelPeltonen 暗示的是,您的
<button>可能会重新加载您的页面(因为您忘记将其设置为type="button")。但即使没有,也不会发生太多事情,因为您的handlerRemove不会删除任何内容。 -
@CherryDT handlerOnSubmit 正在调用 prevetDefault,所以这不会导致页面刷新,但它仍会调用处理程序,所以你的权利他应该设置
type="button"以停止它作为默认值按钮是提交(听起来很愚蠢)。
标签: javascript arrays reactjs object render