如何设置状态(数组)并验证使用循环添加的多个 TextInputs - 反应原生

Posted

技术标签:

【中文标题】如何设置状态(数组)并验证使用循环添加的多个 TextInputs - 反应原生【英文标题】:how to set state (array) and validate multiple TextInputs added using a loop - react native 【发布时间】:2019-08-24 18:24:43 【问题描述】:

(react-native 的新手)我在屏幕中添加了 n 的数量 TextInputs

    需要为这些TextInputs设置状态(数组) 如何验证它们以确保它们不为空,按下按钮
renderFields(listNum)     
    var numLists = parseInt(listNum, 10);    
    var fields = [];
    var numStr = "";
    for (let i = 0; i < numLists; i++) 
        numStr = JSON.stringify(i + 1);
        fields.push(
            <View key=i style=styles.butInput>
                <View style=styles.ChildViewStyle>
                    <TextInput
                        ref=input => 
                          this.textInput = input;
                        
                        key="txt_" + i
                        style=styles.TextInputStyleClass
                        textAlign="left"
                        editable=true
                        maxLength=20
                        defaultValue=numStr
                    />
                </View>
            </View>
        );
    
    return fields;


render() 
    const  navigation  = this.props;
    const listNum = navigation.getParam("listNum", 2);

    return (
        <View style=styles.container>

            <View style=styles.InputContainer>
                <ScrollView>this.renderFields(listNum)</ScrollView>
            </View>

            <View style=styles.settingRow>
                <TouchableOpacity onPress=() => this.validateNum()>
                    <Text style=styles.settingsBtnText>S A V E</Text>
                </TouchableOpacity>
            </View>
        </View>
    );


Can't move further, please help

【问题讨论】:

【参考方案1】:

您可以如下验证:

ref=o => (this["ref_" + i] = o)

validateNum() 
  var isValid = true;
  this.forms.some((i,index)=> 
            if (this["ref_"+index] && !!this["ref_"+index].text() ) 
               isValid =false;
            
        );
  return isValid;

要从 TextInput 获取文本,请创建自定义 TextInput

【讨论】:

【参考方案2】:

考虑使用 redux-form 库进行验证。这比手动验证每个字段要好得多。

https://redux-form.com/8.1.0/

https://esbenp.github.io/2017/01/06/react-native-redux-form-immutable-styled-components/

https://medium.com/wolox-driving-innovation/https-medium-com-wolox-driving-innovation-easy-forms-in-react-native-with-redux-form-1cdc16a9a889

【讨论】:

以上是关于如何设置状态(数组)并验证使用循环添加的多个 TextInputs - 反应原生的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有多个edittext的recyclerview中验证和设置错误?

如何在单击多个项目时使用 jQuery 循环遍历数组?

怎么能在网页自动登录,然后点击修改某个页面,这样循环多个账号

关于element循环表单校验不生效问题

如何在不改变的情况下更新对象数组的嵌套数组的状态

如何判断复选框 checkbox 是选中状态还是未选中