Обновите значение TextInput хэша массива в функции onChangeText
constructor(props) {
super(props);
this.state = {
answers: props.element.answers_data.map((answer, index) => {
return answer;
}
})
<TextInput
value = {this.state.answers[index].answer_text}
onChangeText={(answer_text) => {
this.setState({
answers: [
...this.state.answers.slice(0, index),
{answer: {answer_text}},
...this.state.answers.slice(index + 1,
this.state.answers.length)
]
});
}}
/>
структура данных моих ответов примерно равна: 0: {id: 799, answer_text: "helloas fast" процент: 0}
Я хочу обновить текст ответа и сохранить его в this.state.answers, но когда я пишу текст в textinput и обновляю его, я получаю только answer_text в хэше, и я хочу получить все id, answer_text, процент в хэше. Поэтому, пожалуйста, мне нужно предложение.
Заранее спасибо.
1 ответ
Решение
Вы плохо обработали данные массива. Вы можете либо сохранить его структуру, либо использовать answers_data.map
преобразовать их в строку.
Полный код первого варианта:
constructor(props) {
super(props);
this.state = {
answers: props.element.answers_data.map((answer, index) => {
return { ...answer };
})
}
}
<TextInput
value = {this.state.answers[index].answer_text}
onChangeText={(answer_text) => {
this.setState({
answers: [
...this.state.answers.slice(0, index),
{ ...this.state.answers[index], answer_text },
...this.state.answers.slice(index + 1, this.state.answers.length)
]
});
}}
/>
Полный код варианта два:
constructor(props) {
super(props);
this.state = {
answers: props.element.answers_data.map((answer, index) => {
return answer.answer_text;
})
}
}
<TextInput
value = {this.state.answers[index]}
onChangeText={(answer_text) => {
this.setState({
answers: [
...this.state.answers.slice(0, index),
answer_text,
...this.state.answers.slice(index + 1, this.state.answers.length)
]
});
}}
/>