API перемещается без нажатия на - PullRequest
0 голосов
/ 15 января 2020

У меня есть вызов API, после того как управление вызовами API перейдет на другой экран. Проблема в том, что метод выполняется сам по себе даже до того, как у пользователя есть шанс вызвать метод. Я хочу, чтобы пользователь дал ввод и затем вызвал api, чтобы проверить правильность ввода, а затем перейти к другому экрану.

Это мой код API

const PinCode = dispatch => async ({vCode}) => {
console.log('entro');
try {
    const vSolicitudeId = await AsyncStorage.getItem('SolicitudeId');
    const response = await ForceApi.post('/ValidateCodeController.php', {vSolicitudeId,vCode});
    dispatch({ type: 'guardar', payload: response.data.id});
    console.log(response.data.message);
    console.log(response.data.code);
    navigate('Calculadora',);
} catch (err) {
    console.log(err);
    dispatch({
    type: 'add_error',
    payload: 'Error de Conexion'
    });
}

};

и вот как это называется

const {state, PinCode} = useContext(Context);
  const [vCode, setvCode] = useState('');

  useEffect(() => { 
    PinCode({vCode});
  }, []);
return (
  <View style={styles.container}>
    <View>
      <Text style={styles.textIniciar}>Verificación de PIN</Text>
    </View>
    <View>
      <Text style={styles.Pin}>Ingresa el código que hemos enviado al número registrado.</Text>
    </View>
      <View style={styles.inputContainer}>
          <TextInput style={styles.inputs}
            placeholder="Código"
            underlineColorAndroid='transparent'
            onChangeText={newvCode => setvCode(newvCode)}
            value={vCode}
            autoCorrect={false}
            autoCapitalize='characters'
          />
      </View>
      <TouchableOpacity style={[styles.buttonContainer, styles.loginButton]}  
        onPress={() => PinCode({vCode})}>
        <Text style={styles.loginText}>ENVIAR</Text>
      </TouchableOpacity>
      <View>
      <Text style={styles.Pin}>¿No se ha recibido el código de verificación?</Text>
      <Text style={styles.Pin}>Reenviar</Text>
      </View>
  </View>
);

};

любая помощь будет оценена

1 Ответ

1 голос
/ 15 января 2020

root вашей проблемы в этом фрагменте кода

  useEffect(() => { 
    PinCode({vCode});
  }, []);

Хук useEffect можно вызвать, когда зависимые данные будут изменены. Но если вы передадите '[]' в качестве второго аргумента, код внутри будет выполнен только один раз, когда компонент будет смонтирован. И это то, что происходит в вашем случае. Подробнее https://reactjs.org/docs/hooks-effect.html

Как я вижу из вашего кода, вы можете просто удалить этот useEffect, и все должно работать нормально, как вы хотите.

...