Динамическая форма с TextInput в проблеме FlatList - PullRequest
0 голосов
/ 04 ноября 2019

Фактическое поведение:

Я загружаю динамическую форму в FlatList и должен добавить несколько строк с TextInputs на основе условия. Например, у меня есть флажок. Когда я проверяю флажок, я должен добавить раскрывающийся список и два TextInputs, и когда я снимаю флажок, я должен удалить эти три. Моя проблема заключается в том, что, когда я устанавливаю флажок и ввожу какое-либо значение в TextInputs и снимаю флажок, тогда значение в последнем TextInput присваивается другому TextInput, который не связан с этими условиями.

Ожидаемое поведение:

Последнее значение TextInput не должно присваиваться другому TextInput, который не связан с условиями флажка при снятии флажка. Пожалуйста, предложите. Заранее спасибо.

Дополнительные ресурсы:

Вот мой код для TextInput:

 _onChangeText(e, item, index) {
    console.log("abc123 ", item);
    let count = "false";
    let note;
    if (this.state.inputsValues.length === 0 && item.blocks.question !== undefined) {
        if (item.blocks.question.prompt !== "Notes") {
            note = {
                note: e.nativeEvent.text.replace(/\n/g, ''),
                id: item.blocks.question.prompt
            };
        } else {
            note = {
                note: e.nativeEvent.text.replace(/\n/g, ''),
                id: item.blocks.block_pos
            };
        }
        this.setState({ inputsValues: [...this.state.inputsValues, note] }, () => {
            console.log("length === 0", this.state.inputsValues);
        });
    } else {
        this.state.inputsValues.map((res, idx) => {
            if (item.blocks.question !== undefined && res.id === item.blocks.question.prompt) {
                res.note = e.nativeEvent.text.replace(/\n/g, '');
                count = "true";
            }
        });
        if (count === "false") {
            if (item.blocks.question.prompt !== "Notes") {
                note = {
                    note: e.nativeEvent.text.replace(/\n/g, ''),
                    id: item.blocks.question.prompt
                };
            } else {
                note = {
                    note: e.nativeEvent.text.replace(/\n/g, ''),
                    id: item.blocks.block_pos
                };
            }
            this.setState({ inputsValues: [...this.state.inputsValues, note] }, () => {
                // console.log("gvrtgrtgt", this.state.inputsValues);
            });
        }
    }
}
<NBTextField
itemStyles={[styles.itemStyles, { height: width / 6 }]}
value={inputsValues[index] !== undefined && inputsValues[index].note}
onEndEditing={e => this._onChangeText(e, item)}
onChangeText={this.getInputValue}
onSubmitEditing={() => Keyboard.dismiss()}
inputStyles={[styles.inputStyles, { height: width / 6 }]}
placeholder="Enter here"
/>

Среда:

реагировать-нативный: 0.61.1

Снимок экрана:

enter image description here

1 Ответ

0 голосов
/ 12 ноября 2019

Ниже у меня работает код в mycase

 _onChangeText(e, item, index) {
    if (item.blocks.block_type === 'question') {
      this.state.mainData[index].answer = e.nativeEvent.text;
      this.setState({
        mainData: this.state.mainData,
      });
    }
  }
   <NBTextField
       itemStyles={styles.itemStyles}
       value={item.answer}
       onEndEditing={e => this._onChangeText(e, item, index)}
       onChangeText={e => this.getInputValue(e, item, index)}
       onSubmitEditing={() => Keyboard.dismiss()}
       inputStyles={styles.inputStyles}
      />

...