Помимо предоставления методов для событий onChange
на входах, вам также потребуется указать value
. Например,
value={product.name}
Кроме того, я не уверен, почему состояние product
глубоко вложено, поскольку нет необходимости go на один уровень глубже в этом сценарии. Это снизит сложность. когда вам нужно обновить состояние продукта для каждого из событий onChange
. Вам нужно только распространить текущее состояние продукта с последующим обновлением свойства новыми значениями. Например,
setProduct({
...product,
name: e.target.value
});
Кроме того, когда дело доходит до ввода состояния продукта, нет необходимости утверждать, как TProduct
. Учитывая, что свойства могут быть неопределенными, вы можете сохранить следующий интерфейс,
interface TProduct {
name: string;
price: string;
stock: string;
}
и установить для product
значения Partial<TProduct>
.
И последнее, но не менее важное, если вы работают с более новыми версиями React, вам будет достаточно набрать ваш компонент как React.FC
.
Вот так должен выглядеть ваш компонент.
const AddProductCard: React.FC = () => {
const classes = useStyles();
const [product, setProduct] = React.useState<Partial<TProduct>>({});
return (
<input
value={product.name || ''}
onChange={e => setProduct({...product, name: e.target.value })}
/>
<input
value={product.stock || ''}
onChange={e => setProduct({...product, stock: e.target.value })}
/>
<input
value={product.price || ''}
onChange={e => setProduct({...product, price: e.target.value })}
/>
)
}