Если вы хотите включить this.props.formState
, вы можете распространить объект в новое состояние. Кроме того, вы можете использовать имя входа в качестве ключа состояния, поэтому вам не нужно переписывать его для каждого ввода:
props.setFormState({
...this.props.formState, // copy props.formState in
[evt.target.name]: evt.target.value // use input name as state key
});
Предложение:
Возможно, вы рассмотрите возможность перемещения состояние, объединяющееся в родительский компонент:
// parent component
const [formState, setFormState] = React.useState({});
const onFieldChange = (field, value) => {
setFormState({
...formState,
[field]: value
});
}
return (
<MyFormComponent
formState={formState}
onFieldChange={onFieldChange}
/>
);
Каждый вход может затем вызывать onFieldChange
с именем и значением поля, не касаясь себя с остальной частью состояния:
function MyFormComponent ({onFieldChange}) {
const handler = ({target: {name, value}}) => onFieldChange(name, value);
return (
<div>
<input name="title" value={formState.title} onChange={handler} />
<input name="bio" value={formState.bio} onChange={handler} />
<input name="expertise" value={formState.expertise} onChange={handler} />
</div>
);
}