#arrays #reactjs #forms #field
Вопрос:
Я сопоставляю данные с полем A (Поле продуктов) в раскрывающемся списке выберите параметры в форме реакции. Я хочу автоматически заполнить поле B (поле цены) количеством товара, выбранного в поле A. Я могу указать вариант продукта для поля A. Как заполнить поле B после выбора одного параметра в поле A
Ниже приведен мой код реакции
constructor(props) {
super(props)
this.state = {
products: [],
}
}
handleItemNameChange(event) {
console.log(event.target.value);
console.log(this.state.products);
const selectedProduct = this.state.products.find(product =>
product.id === event.target.value);
this.setState({item_name: event.target.value, item_price:
selectedProduct.price });
}
handleItemPriceChange(event) {
this.setState( { ...this.state, item_price: event.target.value });
}
{/**** Field 1 ******/}
<Field className="form-control form-control-sm" name="item_name" component="select" type="select"
onChange={this.handleItemNameChange}>
{products.map((product) =>
<option key={product.id} value={product.id}>
{ product.name}
</option>
)}
</Field>
{/**** Field 2 ******/}
<Field className="form-control form-control-sm" name="item_price" type="text" onChange={this.handleItemPriceChange} />
{/**** end ******/}
Найдите изображения результатов журнала консоли здесь. «16» — это выбранный продукт, а остальные-все перечисленные продукты
изображение 2
Комментарии:
1. передайте значение в поле 2
Ответ №1:
Вы можете установить состояние item_price с ценой при настройке товара:
handleItemNameChange(event) {
const selectedProduct = this.state.products.find(product => product.id == event.target.value);
this.setState({item_name: event.target.value, item_price: selectedProduct.price });
}
И передайте состояние item_price в качестве значения в поле 2
<Field
className="form-control form-control-sm"
value={this.state.item_price}
name="item_price" type="text"
onChange={this.handleItemPriceChange}
/>
(И в качестве примечания, вам не нужно уничтожать и переходить this.state
к setState
тому, что будет сделано автоматически для вас)
Комментарии:
1. Спасибо вам за ваш ответ. Поэтому я воспользовался вашим способом, но получил ошибку. «Ошибка неперехваченной ссылки: продукты не определены», поэтому я использовал массив «Продукты» в обработчике имени элемента. пусть products= this.state.products Я все еще получаю эту ошибку «Ошибка неучтенной ссылки: выбранный продукт не определен», и эта ошибка тоже «Не может прочитать свойство «цена» неопределенного»
2. handleItemNameChange(событие) { пусть products= this.state.products пусть выбранный продукт = products.find(продукт => product.id === событие.цель.значение); this.setState({имя элемента: событие.цель.значение, цена элемента: выбранный продукт.цена }); }
3. Я обновил код. Ты заставил его работать? если нет, вы показываете обновленный код и ошибку, с которой столкнулись.
4. Я обновил код, как вы и предлагали. Сейчас я получаю эту ошибку «app.js:35405 Ошибка неизвестного типа: Не удается прочитать свойство»цена » неопределенного»
5. можете ли вы поместить console.log(событие.цель.значение); console.log(это.состояние.продукты); в начале функции handleItemNameChange и поделиться тем, что регистрируется в консоли браузера.