Вы в основном пытаетесь сделать пользовательский ввод. В общем, вы должны быть осторожны, как этот вход контролируется? На вашем интерфейсе у вас есть entry
(что может быть начальным значением), но внутренне у вас есть result
.
Оба на самом деле value
во входном контексте, но обычно они управляются либо из внешнего (на интерфейсе) или отслеживаются внутри, но не оба.
Просто отображение, если entry
изменено, что может быть result
?
Правильный путь следующий
const Input = ({ value, onChange }) => {
// no internal state here
return (
<input value={value} onChange={onChange} />
)
}
Это чистая модель прохода с обоими value
и onChange
, управляемыми внешним
Теперь вы можете спросить, как мне изменить внешний вид моего пользовательского ввода.
Теперь вы можете написать оболочку для onChange
, чтобы внедрить вашу собственную реализацию.
const onValueChange = e => {
// e.target.value
// do your own handling and then
// if need call onChange(e) to handle external
}
<input onChange={onValueChange} />
Здесь я пропущу изменение пользовательского интерфейса для input
, поскольку ваш пример уже есть.
Последний комментарий здесь, контролируемый ввод не имеет хранилища. Таким образом, чтобы использовать ваш ввод, вам нужно иметь состояние, определенное из внешнего источника.
const [result, setResult] = useState(0)
return (
<YourInput value={result} />
)
Здесь сообщение о том, что ВОЗ должна управлять хранилищем (памятью), это может быть приспособление № 1 для поставить на место перед разработкой любого компонента.