我正在try 创建一些东西,用户可以添加多个地址,最多3个,默认的一个不能删除.
在本例中,地址只是街道名称和城市.
我正在努力弄清楚如何处理这个场景中的状态和表单输入字段.
我可以 for each 地址设置3个不同的州,并以这种方式以州的值为目标,但我想知道你们是否有更干净的方法来做这样的事情.
提交表单后,我需要这些地址的数组,因为它们在我的用例中构成另一个对象的一部分.
以下是react 代码
import { useState } from "react";
import "./styles.css";
export default function App() {
const [addressCount, setAddressCount] = useState(1);
const [address, setAddress] = useState([]);
const handleAddressChange = (event) => {
const { name, value } = event.target;
// handle address state
};
const addAddress = () => {
if (addressCount == 3) {
alert("you cannot more than 3 addresses");
return;
}
setAddressCount(addressCount + 1);
};
const removeAddress = () => {
if (addressCount == 1) {
alert("You cannot remove this address");
return;
}
setAddressCount(addressCount - 1);
};
const AddressDiv = (index) => {
return (
<div key={index} className="address-section">
<div className="mb-2">
<label>Street name</label>
<input
type="text"
placeholder="Enter street name"
name="streetName"
onChange={handleAddressChange}
/>
</div>
<div className="mb-2">
<label>City</label>
<input
type="text"
placeholder="Enter city name"
name="streetName"
onChange={handleAddressChange}
/>
</div>
<div className="add-another-address-section mt-3 mb-4">
<button type="button" onClick={addAddress}>
+ Add another
</button>
<button type="button" onClick={removeAddress}>
- Remove
</button>
</div>
</div>
);
};
return (
<div className="App">
DIV COUNT {addressCount}
<AddressDiv />
{Array.from({ length: addressCount - 1 }, (_, index) => {
return <div style={{ margin: "2rem" }}>{AddressDiv(index)}</div>;
})}
</div>
);
}
这是一个CodeSandbox链接,显示了它的大致外观.
https://codesandbox.io/p/sandbox/generate-div-8hknk3?file=%2Fsrc%2FApp.js%3A63%2C26个