Here is my solution https://codesandbox.io/s/pensive-lake-erynd
pass function to KeyValue component to get values when input changes
const handleChangeKeyValues = name => value => {
setState(prevState => {
const newValues = {
...prevState.values,
[name]: value
};
return {
...prevState,
values: newValues
};
});
};
and receives values from props and handle inputs in KeyValue component
const KeyValue = ({ onChange, values = { firstName: "", lastName: "" } }) => {
const handleChangeInput = event => {
const { value, name } = event.target;
const newFormValue = { ...values, [name]: value };
onChange(newFormValue);
};
return (
<Form.Group widths="equal">
<Form.Input
value={values.firstName}
fluid
label="Key"
name="firstName"
placeholder="First name"
onChange={handleChangeInput}
/>
<Form.Input
value={values.lastName}
fluid
label="Value"
name="lastName"
placeholder="Last name"
onChange={handleChangeInput}
/>
<Icon style={{ top: 30, position: "relative", left: 10 }} name="delete" />
<Form.Input
style={{ display: "none" }}
fluid
label=""
placeholder="Last name"
/>
</Form.Group>
);
};
Store values in state under unique name for each inputs