Обновите значение 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)
            ]
          });
        }} 
 />
Другие вопросы по тегам