使用React Native提交数据后重置表单中的字段

时间:2020-10-21 04:46:29

标签: javascript react-native

我正在尝试使用表单将用户添加到我的数据库中,但是单击提交按钮后,我也想重置表单中的字段。

我正在这样设置状态,并尝试通过onPress道具提交数据:

export default function Cadastro({}) {
  const [nome, setNome] = useState("");
  const [idade, setIdade] = useState("");
  const [email, setEmail] = useState("");
  const [estado, setEstado] = useState("");
  const [cidade, setCidade] = useState("");
  const [endereco, setEndereco] = useState("");
  const [telefone, setTelefone] = useState("");
  const [nome_usuario, setNome_usuario] = useState("");
  const [senha, setSenha] = useState("");
  const [confirmacao, setConfirmacao] = useState("");

  var newUser = {
    nome: nome,
    idade: idade,
    email: email,
    estado: estado,
    cidade_id: cidade,
    endereco: endereco,
    telefone: telefone,
    nome_usuario: nome_usuario,
    senha: senha,
  };

  return (
    <SafeAreaView style={{ flex: 1 }}>
      <FocusAwareStatusBar barStyle="light-content" backgroundColor="#88c9bf" />
      <ScrollView>
        <KeyboardAvoidingView style={styles.background}>
          <View style={styles.infobox}>
            <Text style={styles.infotext}>
              As informações preenchidas serão divulgadas apenas para a pessoa
              com a qual você realizar o processo de adoção e/ou apadrinhamento,
              após a formalização do processo.
            </Text>
          </View>

          <View style={styles.regform}>
            <Text style={styles.label}>INFORMAÇÕES PESSOAIS</Text>

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Nome completo"
              autoCorrect={false}
              value={nome}
              onChangeText={setNome}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Idade"
              autoCorrect={false}
              value={idade}
              onChangeText={setIdade}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="E-mail"
              autoCorrect={false}
              value={email}
              onChangeText={setEmail}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Estado"
              autoCorrect={false}
              value={estado}
              onChangeText={setEstado}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Cidade"
              autoCorrect={false}
              value={cidade}
              onChangeText={setCidade}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Endereço"
              autoCorrect={false}
              value={endereco}
              onChangeText={setEndereco}
            />

            <TextInput
              style={styles.textInput}
              placeholder="Telefone"
              autoCorrect={false}
              value={telefone}
              onChangeText={setTelefone}
            />

            <Text style={styles.label}>INFORMAÇÕES DE PERFIL</Text>

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Nome de usuário"
              autoCorrect={false}
              value={nome_usuario}
              onChangeText={setNome_usuario}
            />

            <TextInput
              style={[styles.textInput, { marginBottom: 36 }]}
              placeholder="Senha"
              autoCorrect={false}
              value={senha}
              onChangeText={setSenha}
            />

            <TextInput
              style={styles.textInput}
              placeholder="Confirmação de senha"
              autoCorrect={false}
              value={confirmacao}
              onChangeText={setConfirmacao}
            />

            <Text style={styles.label}>FOTO DE PERFIL</Text>

            <View style={styles.container}>
              <TouchableHighlight onPress={() => {}}>
                <View style={styles.button}>
                  <Image source={require("../../assets/controlpoint.png")} />
                  <Text style={{ color: "#757575" }}>adicionar fotos</Text>
                </View>
              </TouchableHighlight>
            </View>

            <View style={{ paddingTop: 32, paddingBottom: 24 }}>
              <SubmitButton
                text="FAZER CADASTRO"
                onPress={() => {
                  AddUsuario(newUser);
                }}
              />
            </View>
          </View>
        </KeyboardAvoidingView>
      </ScrollView>
    </SafeAreaView>
  );
}

我还尝试创建一个设置状态为setNome('')之类的函数,但是随后出现“ Invalid hook call”错误。

还有,除了我上面所做的以外,还有没有更好的方法来初始化多个状态?

谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

为所有字段更改此值

从“ onChangeText = {setNome}”到onChangeText = {(text)=> setNome(text)}

提交后清除值

const clearForm = () => {
    setName('');
    setIdade('');
    ......
}

<SubmitButton
   text="FAZER CADASTRO"
   onPress={() => {
    AddUsuario(newUser);
    clearForm();
   }}
/>

答案 1 :(得分:0)

由于使用的是功能组件,因此可以按以下方式使用Hooks。如果您有条件渲染,请检查代码是否在传递给useEffect的函数中定义了todoInput。我假设您的状态变量在依赖项列表中称为todoText。

import {useRef, useEffect} from 'react';


let AddTodo = ({ dispatch }) => {
    const todoInput = useRef();
    useEffect(()=>todoInput.current.clear(),[todoText]);

      return (
          <TextInput 
              ref={todoInput}
              onSubmitEditing = { e => { dispatch(addTodo(e.nativeEvent.text)) } } 
          />
      )
    }