Bonjour,
Je travaille sur une application en React Native.
Pour le formulaire d'enregistrement de nouveau compte, je souhaite vérifier que le nouveau Login n'est pas déjà présent en base de données. J'utilise un Fetch pour récupérer un tableau avec les Logins présents en bdd.
Je parcours le tableau avec un for, et avec un if je modifie la variable Result de "déjà utilisé" à "disponible". J'utilise un composant fonctionnel et un hook d'état.
J'affiche ensuite en console la valeur de résultat.
Tout cela est déclenché par une pression sur un bouton.
Tout cela fonctionne très bien, sauf que ... seulement la deuxième fois. Chaque fois que je change la valeur du Login (soit en dur, soit avec un textImput), l'état précédant s'affiche.
Supposons que par défaut, Result vaut "déjà utilisé", je rentre un Login non présent en bdd. La console affiche "déjà utilisé" à la première pression, puis "disponible" à la deuxième. Même comportement dans l'autre sens.
Voici des extraits de code :
J'ai déjà remarqué ce comportement dans un fetch où je voulais inclure une redirection (navigate("Login")) une fois la requête exécutée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 const SigninForm = ({ navigation: { navigate } }) => { (...) const [Login, onChangeLogin] = React.useState(""); const [Result, onChangeResult] = React.useState("déjà utilisé"); (...) <View style={styles.main_container}> <TextInput style={styles.textinput} onChangeText={onChangeLogin} value={Login} placeholder="Entrer votre identifiant" /> </View> (...) <Button title="Soumettre" onPress={() => { fetch(url+queryCheck) .then(function(res) { if (res.ok) { return res.json() } }) .then(function(value) { var cpt = 0 for (var i in value) { if(value[i].Login != Login) { //console.log(value[i].Login+" = " + Login) cpt++ } } //console.log("cpt =" + cpt, "tab = " + (value.length)) if (cpt == value.length) { onChangeResult("disponible") } else { onChangeResult("déjà utilisé") } console.log(Result) }) .catch(function(err) { console.log(err); }) } }/> (...)
Si quelqu'un sait comment arranger ça. Merci.
Partager