【问题标题】:Dynamic form with TextInput in a FlatList issueFlatList 问题中带有 TextInput 的动态表单
【发布时间】:2019-11-04 11:30:51
【问题描述】:

实际行为:

我在 FlatList 中加载一个动态表单,我应该根据条件添加几行 TextInputs。例如,我有一个复选框。当我选中复选框时,我必须添加一个下拉列表和两个 TextInput,当我取消选中复选框时,我必须删除这三个。我的问题是,当我选中复选框并在 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

截图:

【问题讨论】:

    标签: react-native react-native-flatlist textinput


    【解决方案1】:

    以下代码在 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}
          />
    
    

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 1970-01-01
      • 2021-02-15
      • 2019-12-20
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2013-02-16
      相关资源
      最近更新 更多