Я не понял, как редактировать данные JSON из запроса Put (это должен быть запрос PUT)
Я создал некоторые входные данные, как вы видите, и мне нужно найти способ обновления/добавления новых кредитно-дебетовых данных для данных JSON, различающихся «до» и «от».
Кроме того, если добавлено значение «до», оно должно быть уменьшено от общего баланса, а если добавлено значение «от», оно должно быть добавлено к общему балансу.
Я создал поле выбора и ввод для этого (не соединял json и компонент) Мой компонент Updater выглядит следующим образом:
Сам компонент:
import React, { Component } from 'react';
import './Updater.scss';
import Axios from 'axios';
export default class Updater extends Component {
constructor(){
super();
this.state = {
amount: '',
description: '',
from: '',
to: '',
date: new Date()
}
}
onSubmitEdit = () => {
Axios.put('http://localhost:8080/api/balance/add',
{});
}
render() {
return (
<div className = "updatercontainer">
<div className = "updaterinputs">
<input className = "amount" name = "amount"
type = "text" placeholder = "Enter Amount"/>
<input className = "description" name = "description"
type = "text" placeholder = "Enter Description"/>
</div>
<div className = "selectbox">
<select>
<option value = "From">From</option>
<option value = "To">To</option>
</select>
<input className = "fromto" type = "text"
name = "fromto" placeholder = "Enter From or To Name"/>
</div>
<div className = "selectboxcontainer">
<div className = "button-container">
<a href = "#" onClick = {this.onSubmitEdit}
className = "button amount-submit">
<span></span>Update</a>
</div>
</div>
</div>
)
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вам просто нужно событие onChange для обновления состояния на основе имени входных значений
handleChangeEvent = (e) => {
this.setState({ [e.target.name]: e.target.value })
}
//On your inputs
<input
className = "amount"
name = "amount"
type = "text"
placeholder = "Enter Amount"
value = {this.state.amount}
onChange = {() => this.handleChangeEvent(e)}
/>
вы захотите передать состояние в качестве второго параметра для вашего запроса PUT, как сказал Джон выше.
class Updater extends React.Component {
constructor() {
super();
this.state = {
amount: 0,
description: "",
_from: true,
_to: false,
date: new Date()
};
}
onAmountChange = e => {
this.setState({
amount: e.target.value
});
};
onDescriptionChange = e => {
this.setState({
description: e.target.value
});
};
onSelectTypeChange = e => {
console.info(e.target.value);
this.setState({
[e.target.value === "from" ? "_from" : "_to"]: true,
[e.target.value !== "from" ? "_from" : "_to"]: false
});
if (e.target.value !== "from" && (this.state.from != null || this.state.from !== "")) {
this.setState({
to: this.state.from,
from: null
});
} else if (e.target.value === "from" && (this.state.to != null || this.state.to !== "")){
this.setState({
from: this.state.to,
to: null
});
}
};
onFromToChange = (e) => {
this.setState({
[this.state._from ? "from" : "to"]: e.target.value
});
}
onSubmitEdit = () => {
Axios.put(
"https://httpbin.org/put",
{
...this.state,
},
{ headers: { "Content-Type": "application/json" } }
)
.then(response => {
// handle Response
})
.catch(err => {
// handle Error
});
};
render() {
return (
<div className = "updatercontainer">
<div className = "updaterinputs">
<input
onChange = {this.onAmountChange}
className = "amount"
name = "amount"
type = "text"
placeholder = "Enter Amount"
/>
<input
onChange = {this.onDescriptionChange}
className = "description"
name = "description"
type = "text"
placeholder = "Enter Description"
/>
</div>
<div className = "selectbox">
<select onChange = {this.onSelectTypeChange}>
<option value = "from">From</option>
<option value = "to">To</option>
</select>
<input onChange = {this.onFromToChange} className = "fromto" type = "text"
name = "fromto" placeholder = "Enter From or To Name"/>
</div>
<div className = "selectboxcontainer">
<div onClick = {this.onSubmitEdit} className = "button-container">
<a href = "#" className = "button amount-submit">
<span>Update</span>
</a>
</div>
</div>
</div>
);
}
}
Подумайте о том, чтобы узнать больше о Обработка входных данных, форм, событий
Спасибо большое. Но одну вещь я нашел. Я думаю, вы удалили ввод "fromto". Но, как вы можете видеть в данных JSON, значение из ввода «fromto» переходит в «from» или «to» в зависимости от вашего выбора в поле выбора. Это была самая сложная часть для меня, я даже не думал о логике. У вас есть представление об этом?
да, так как это отправляет на сервер, если пользователь выбрал «от» или «до», вы можете применить это к серверу, если у вас нет контроля над этим, просто добавьте поле.
Хорошо, давайте рассмотрим, что у нас есть контроль над сервером для обработки выбранных «от» или «до», а также входного значения (не логического). Например; выбрал "от" и написал "Джон", далее как получится "от": "Джон" на сервер.
Я обновил код... соответствует ли он вашим требованиям?
это проблема на стороне сервера или неверный маршрут.
Джамал, у меня проблема с добавленной стоимостью. Нет проблем со значением «к» (когда я выбираю «к» и добавляю его только к «к», но при выполнении противоположного значения «от» добавляется как к, так и к. Вы видите проблему в коде?
Нет, но если вы хотите проверить себя, запустите песочницу и посмотрите ответ на вкладке dev (httpbin)
вам нужно передать данные для отправки на сервер во втором аргументе запроса на размещение. сохранить значение каждого входа в локальном состоянии