#javascript #reactjs
#javascript #reactjs
Вопрос:
У меня есть несколько переменных в моем this.state
объекте:
this.state = {
draw_number: '',
user_number_1: '',
user_number_2: '',
user_number_3: '',
user_number_4: '',
user_number_5: '',
user_number_6: '',
}
Как я могу перебирать их и добавлять в следующий объект:
results {
numbers: [],
draws: x
}
Это мое текущее решение:
this.state = {
draw_number: '',
user_number_1: '',
user_number_2: '',
user_number_3: '',
user_number_4: '',
user_number_5: '',
user_number_6: '',
}
}
submitHandler = () => {
let results = {};
for (let i=1; i<=6; i ) {
results = this.state['user_number_' i];
}
console.log(results);
}
Прямо сейчас я не могу выполнить консоль.зарегистрируйте мой объект «результаты»
Комментарии:
1. Можете ли вы более конкретно сформулировать свой вопрос? Чем это должно отличаться от вашего собственного решения?
2. Я хочу перебрать значения моего состояния и добавить их к
results
объекту, который позже будет передан через AJAX-вызов на сервер3. Ваша проблема в том, что вы каждый раз перезаписываете результаты в своем цикле вместо добавления / push / add / etc…
4. Одним из решений является создание объекта со свойствами number
let numbers = { number_1: '', etc.. }
и при сохранении, используя Object.keys, вы можете помещать их в массив.
Ответ №1:
Вы могли бы извлечь draw_number
свойство из состояния и использовать его как draws
, а затем использовать Object.keys
для остальных свойств в вашем состоянии и использовать эти значения в качестве numbers
массива.
submitHandler = () => {
let { draw_number: draws, ...rest } = this.state;
let results = {
numbers: Object.keys(rest).map(key => rest[key])
draws,
};
console.log(results);
}
Ответ №2:
Вы можете использовать [оператор распространения][https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax ]. Таким образом, вы можете скопировать все ключи из object (новое в ECMAScript 2018):
const myFriend = {name: 'George', age: 12}
const mySuperFriend = { ...myFriend, superpowers: true }
ПРИМЕЧАНИЕ
вы не должны изменять объект состояния непосредственно в react.
Вместо этого создайте новый объект и setState
его