Некоторые замечания:
- setState внутри обработчика
onInputNumber()
- , поскольку компонент полностью контролируется, вам не нужно
defaultValue
- добавить
value={state.percentage}
реквизит вместо. - добавить
percentage
внутри save()
Попробуйте онлайн: https://stackblitz.com/edit/react-5qrwcq
const Test = ({ user, setUser }) => {
const [state, setState] = useState({ name: "", password: "", percentage: "1" });
function onChange(e) {
setState({
...state,
[e.target.name]: e.target.value
});
console.log(state)
}
function onInputNumber(value) {
setState({...state, percentage: value})
console.log('changed', value);
}
function save() {
setUser({ ...user, name: state.name, password: state.password, percentage: state.percentage });
}
return (
<div>
<input name='name' onChange={onChange} />
<input name='password' onChange={onChange} />
<InputNumber
// defaultValue={100}
min={0}
max={100}
value={state.percentage}
formatter={value => `${value}%`}
parser={value => value.replace('%', '')}
onChange={onInputNumber}
/>
<button onClick={save}>save</button>
</div>
);
};