javascript - 如何在 React 中从同一个子组件表单创建对象数组
问题描述
我正在尝试从具有相同字段的子组件表单创建对象数组。
我正在使用反应钩子来存储状态并在 JSX 中使用 for 循环重复子组件。
App 流程 => Parent --> 2 个相同的 Child 但不同的输入 --> 创建对象数组 --> 返回对象的父数组
用户界面
父代码
{[...Array(2)].map((e, i) => {
const deliveryContactDetails = deliveryContact => {
// deliveryRef[i].current.sendData()
console.log(deliveryContact);
}
return (
<React.Fragment>
<Grid item xs={12}>
<FormLabel component="legend">
Delivery Contact Person : ({i+1})
</FormLabel>
</Grid>
<DeliveryContact formNo={i+1} ref={deliveryRef[i] = useRef()} saveDelivery={deliveryContactDetails} ></DeliveryContact>
</React.Fragment>
)
})}
</React.Fragment>
子代码
const formNo = props.formNo;
const [values, setValues] = useState({...contactObj})
const handleInputChange = ({ target }) => {
const { name, value } = target;
setValues({...values, [name]: value})
};
useImperativeHandle(ref,() => ({
sendData() {
props.saveDelivery(values);
}
}));
return(
<React.Fragment>
<Grid item xs={12} sm={6}>
<TextField
select
fullWidth
margin="dense"
id="salutation"
name={"salutation" + formNo}
fullWidth
onChange={handleInputChange}
value={values.salutation}
variant="outlined"
label="Salutation"
>
<MenuItem value={`Mr.`}>Mr.</MenuItem>
<MenuItem value={`Ms.`}>Ms.</MenuItem>
</TextField>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
id="deliveryContactName"
name={"name" + formNo}
label="Delivery Contact Name"
fullWidth
variant="outlined"
margin="dense"
onChange={handleInputChange}
value={values.deliveryContactName}
inputProps={{
maxLength: 40
}}
/>
</Grid>
)
所需对象
"contacts" : [
{
"name": "asdasdas123da",
"phone" : 9898989898,
"email": "test@mailinator.com",
"designation" : "Some Manager" ,
"salutation" : "Mr"
},
{
"name": "asdasdas",
"phone" : 9898989898,
"email": "test@mailinator.com",
"designation" : "Some Manager" ,
"salutation" : "Mr"
}
]
解决方案
推荐阅读
- java - 如何使用java合并json中的重复键
- clang - 链接后如何获取位码llvm?
- cpu-architecture - 在 AVR 微控制器中将寄存器作为内存的一部分有什么好处?
- python-3.8 - urllib3.exceptions.ProxySchemeUnknown:不支持代理方案无
- python - 加载张量流图像并创建补丁
- go - 如何确保 goroutine 在 main() 之前退出?不使用 WaitGroup
- data-structures - 使用堆栈删除序列中连续的相同字符
- javascript - 按钮停止使用绝对位置 React Native
- c# - .Net Core 中的授权/角色属性
- git - 需要删除远程提交,该提交是已关闭合并请求中显示的已删除分支的一部分