【问题标题】:calling a function automatically自动调用函数
【发布时间】:2020-01-11 01:56:02
【问题描述】:

我有一个表单需要进行一些验证以自动填充另一个字段,我希望在填充所有必需的值后自动调用该函数,我尝试在最后一个字段上使用一个 onChange 来执行此操作,但它不会如果用户在其他输入之前填写该输入,则可以工作。

有什么建议吗?这是我的 api 调用

    const getRFC = ({vLastName,vSecondLastName,vName,vSecondName,vBirthDate}) => {
  ForceApi.post(`/GetRfcController.php`, {  vName, vSecondName, vLastName, vSecondLastName, vBirthDate })
    .then(res => {
      console.log(res.data.resultRFC);
      setvRFC(res.data.resultRFC);
    })
}

这是我的文本输入和日期选择器

 return ( 
    <ScrollView>
      <View style={styles.buttonContainer}>
        <View style={styles.inputContainer}>
          <TextInput style={styles.inputs}
            placeholder="Nombre"
            underlineColorAndroid='transparent'
            onChangeText={newvName => setvName(newvName.toUpperCase())}
            value={vName}
            autoCorrect={false}
            autoCapitalize='characters'
          />
        </View>
        <View style={styles.inputContainer}>
          <TextInput style={styles.inputs}
            placeholder="Segundo nombre"
            underlineColorAndroid='transparent'
            onChangeText={newvSecondName => setvSecondName(newvSecondName.toUpperCase())}
            value={vSecondName}
            autoCorrect={false}
            autoCapitalize='characters'
          />
          </View>
          <View style={styles.inputContainer}>
            <TextInput style={styles.inputs}
              placeholder="Apellido paterno"
              underlineColorAndroid='transparent'
              onChangeText={newvLastName => setvLastName(newvLastName.toUpperCase())}
              value={vLastName}
              autoCorrect={false}
              autoCapitalize='characters'
            />
          </View>
          <View style={styles.inputContainer}>
            <TextInput style={styles.inputs}
              placeholder="Apellido materno"
              onChangeText={newvSecondLastName => setvSecondLastName(newvSecondLastName.toUpperCase())}
              underlineColorAndroid='transparent'
              value={vSecondLastName}
              autoCorrect={false}
              autoCapitalize='characters'
            />
          </View>
          <View style={styles.containerdate}>
            <DatePicker 
              date={vBirthDate} //initial date from state
              mode="date" //The enum of date, datetime and time
              placeholder="select date"
              format="DD/MM/YYYY"
              minDate="01/01/1900"
              maxDate="01/01/2019"
              confirmBtnText="Confirm"
              cancelBtnText="Cancel"
              androidMode="spinner"
              customStyles={{
                placeholderText: {
                  fontSize: 16,
                },
                dateIcon: {
                  height: 0,
                  width: 0,
                },
                dateText: {
                  color: '#b3b4b5',
                  fontSize: 16,
                },
                dateInput: {
                  borderWidth: 0,
                }
              }}
              onDateChange={(date) => {setvBirthDate(date);} }
            />
          </View>

这是必须使用 api 的值更新的文本输入

         <View style={styles.inputContainer}>
            <TextInput style={styles.inputs}
              placeholder={vRFC}
              underlineColorAndroid='transparent'
              value= {vRFC}
              editable={false} 
              selectTextOnFocus={false}
              autoCorrect={false}
              autoCapitalize='characters'
            />
          </View>

任何帮助将不胜感激

【问题讨论】:

  • 每个输入的状态都有一个对象。这将允许从所有组件轻松访问输入值。对于每个事件,您都可以进行输入验证,如果一切顺利,请执行一些操作。

标签: reactjs react-native


【解决方案1】:

你可以使用useEffect钩子

useEffect(() => {
    if (vLastName && vSecondLastName && vName && vSecondName && vBirthDate) {
        getRFC({vLastName, vSecondLastName, vName, vSecondName, vBirthDate});
    }
}, [vLastName, vSecondLastName, vName, vSecondName, vBirthDate]);

【讨论】:

  • srry 我试过了,但它给我一个错误它说 vLastName 未定义
  • 你能用你最新的完整代码更新你上面的问题吗?
  • 问题出在 getRFC();我没有发送参数
  • 如果您的getRFC 需要参数,您必须将它们传递给您的方法调用。请参阅上面的更新答案。
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2019-07-26
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多