我正在尝试提交一个将表单字段输入到 React 挂钩状态对象的表单。但是,应用程序中期望有效负载对象为某种格式的其他组件会访问有效负载对象。
const [formInput, setFormInput] = useState();
const onChange = event => {
event.target.name = event.target.value;
}
return (
<form onSubmit="props.onSubmit">
<label>First Name</label>
<input value="formInput.first-name" name="first-name" onChange={onChange}></input>
<input value="formInput.person-dept" name="person-dept" onChange={onChange}></input>
<button type="submit">Add a cadet</button>
</form>
)
因此,formInput 对象有两个属性。但它们需要嵌套,如下所示:
//acceptable payload:
{cadet: [
first-name: '',
dept: ''
]
}
我尝试调用一个函数来使用新的状态对象包装它们,但它给了我一个未定义的模式属性错误:
const schema = () => {
cadet: [
first-name: '',
dept: ''
]
}
const [formattedInput, setFormattedInput] = useState(schema);
const updateInput = () => {
setFormattedInput(
cadet: {
{first-name: {formInput.first-name} || null},
{dept: {formInput.person-dept} || null}
}
)
}
updateInput();
api.post('~/person/cadet', updateInput);
在上面的例子中,schema 的属性是 undefined、cadet 和 first-name。此外,为了在调用 API 之前设置 setFormattedInput 对象,我需要实例化具有它的函数,但由于 React 规则,调用 updateInput(); 当组件被渲染并且未定义时运行(有点像功能组件需要 componentDidUpdate() )。
这应该很常见——除非您从头开始构建应用程序,否则我们都需要在表单状态对象到达 API 之前重新格式化它们。有人知道怎么做吗?
为了提供一些上下文,NPM 包映射器做了需要做的事情,但它根本不起作用(https://www.npmjs.com/package/mapper)。