Я новичок в ReactJS и пытаюсь изменить значения формы, которая заполняется ответом на вызов API.Я хочу иметь возможность изменять принципалы, полученные в каждой строке, и получать их сумму в другом поле.Функция обработчика onChange
:
handleAmortScheduleChange(field , key ,e ){
const value = e.target.value;
this.setState({
[get_schedule[key][field]] : value,
[get_emi_amount]:get_schedule[key]["principal"] + get_schedule[key]["interest"],
[get_schedule[key]["closing_balance"]] : get_schedule[key]["starting_balance"] - get_emi_amount
});
var arr = document.getElementsByName('get_schedule_principal_here');
var tot=0;
for(var i=0;i<arr.length;i++){
if(parseInt(arr[i].value))
tot += parseInt(arr[i].value);
}
document.getElementById('get_total_principal').value = tot;
}
Код JSX:
{this.state.get_schedule.map((row,key) =>
<div key={key} className="row aaaa">
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_emi_date" type="date" required="required" id="get_schedule_emi_date" value={row.date} />
<label for="input" className="getAmort-control-label">EMI Date</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_emi_amount" type="number" required="required" id="get_schedule_emi_amount" value={row.amount}/>
<label for="input" className="getAmort-control-label">EMI Amount</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_principal" type="number" required="required" id="get_schedule_principal" name="get_schedule_principal_here" value={row.principal} onChange={this.handleAmortScheduleChange.bind(this, "principal",key)}/>
<label for="input" className="getAmort-control-label">Principal</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_interest" type="number" required="required" id="get_schedule_interest" value={row.interest} onChange={this.handleAmortScheduleChange.bind(this, "principal",key)} />
<label for="input" className="getAmort-control-label">Interest</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_starting_balance" type="number" required="required" id="get_schedule_starting_balance" value={row.starting_balance }/>
<label for="input" className="getAmort-control-label">Starting Balance</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input ref = "get_schedule_closing_balance" type="number" required="required" id="get_schedule_closing_balance" value={row.closing_balance}/>
<label for="input" className="getAmort-control-label">Closing Balance</label><i className="getAmort-bar"></i>
</div>
</div>)}
<div className="row">
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input type="number" required="required" id="get_total_principal" />
<label for="input" className="getAmort-control-label">Total Principal</label><i className="getAmort-bar"></i>
</div>
<div className="getAmort-form-group col-xs-12 col-sm-12 col-md-2 col-lg-2">
<input type="number" required="required" id="get_total_interest" />
<label for="input" className="getAmort-control-label">Total Interest</label><i className="getAmort-bar"></i>
</div>
</div>
get_schedule
- это массив массивов в ответе API, содержащий значения для всехполя в форме.По сути, я пытаюсь изменить значения для принципала и интереса, введенные пользователем, и установить их соответствующие значения в массиве get_schedule.
Ошибка, которую я получаю в функции handleAmortScheduleChange
, равна
Uncaught ReferenceError: get_schedule is not defined
,Я не могу установить государство для интереса или принципала.Где я иду не так и каково было бы решение этой проблемы?
РЕДАКТИРОВАТЬ 1: По запросу, определение get_schedule и некоторых других параметров в классе компонентов.
class LoanDetails extends Component {
constructor(props) {
this.state={
get_schedule : [],
get_interest : 0,
get_principal : 0,
get_starting_balance : 0,
get_closing_balance : 0,
get_emi_date : 0,
get_emi_amount : 0,
}
}
Значениеустановите get_schedule из ответа API:
get_schedule: [{discount: 0, amount: 501, starting_balance: 1000, interest: 1, date: "2019-01-06",…},…]
0: {discount: 0, amount: 501, starting_balance: 1000, interest: 1, date: "2019-01-06",…}
amount: 501
closing_balance: 500
date: "2019-01-06"
discount: 0
interest: 1
principal: 500
starting_balance: 1000
1: {discount: 0, amount: 501, starting_balance: 500, interest: 1, date: "2019-02-06", closing_balance: 0,…}
amount: 501
closing_balance: 0
date: "2019-02-06"
discount: 0
interest: 1
principal: 500
starting_balance: 500