POST-запрос отправляется при втором или третьем нажатии кнопки ввода, почему? - PullRequest
0 голосов
/ 28 октября 2018

Так что все в моем коде работает почти так же, как и предполагалось, только запрос на отправку отправляется за секунду или, может быть, даже при третьем щелчке по кнопке ... Я предполагаю, что это связано с тем, как я обновляюсьсостояние редукса, но мой мозг застыл, может кто-нибудь указать мне, где моя ошибка?

Приветствия!

class AddressScreen extends Component {
  state = {
    usersNickOrName: "",
    usersAddress: "",
    usersPhoneNumber: ""
  };

  onPressHandler = () => {
    this.props.deliveryInfo(
      this.state.usersNickOrName,
      this.state.usersAddress,
      this.state.usersPhoneNumber
    );

    let uid = this.props.uid;

    axios.post(
      `.../users/${uid}/info.json`,
      {
        nameOrNick: this.props.name,
        address: this.props.address,
        phoneNum: this.props.phoneNum
      }
    );
    this.props.navigator.pop();
  };

  render() {
    return (
      <View style={styles.container}>

        <AnimatedForm delay={100} distance={10}>
          <AnimatedInput
           onChangeText={text => {
              this.setState({ usersNickOrName: text });
            }}
          />
          <AnimatedInput
            onChangeText={text => {
              this.setState({ usersAddress: text });
            }}
          />
          <AnimatedInput
            onChangeText={text => {
              this.setState({ usersPhoneNumber: text });
            }}
          />

          <Animated.View style={styles.buttonView}>
            <TouchableOpacity
              style={styles.button}
              onPress={this.onPressHandler}
            >
              <Text style={{ color: "#fff" }}>Dodaj Info</Text>
            </TouchableOpacity>
          </Animated.View>
        </AnimatedForm>
      </View>
    );
  }
}



const mapStateToProps = state => {
  return {
    name: state.usersNickOrName,
    address: state.usersAddress,
    phoneNum: state.usersPhoneNumber,
    uid: state.userUid
  };
};

const mapDispatchToProps = dispatch => {
  return {
    deliveryInfo: (usersName, usersAddress, phoneNum) =>
      dispatch(deliveryInfo(usersName, usersAddress, phoneNum))
  };
};

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(AddressScreen);

РЕДАКТИРОВАТЬ:

Что я сделал,Я поместил свое состояние обновления редукса в componentWillUpdate и удалил его из onPressHandler.Теперь он работает почти так, как задумано, например, если я вхожу в Лондон, ул.36 это будет POST запрос Лондон ул.3, он не отправит последнее письмо или номер на сервер ... Как получилось?

componentWillUpdate() {
    this.props.deliveryInfo(
      this.state.usersNickOrName,
      this.state.usersAddress,
      this.state.usersPhoneNumber
    );
  }

1 Ответ

0 голосов
/ 28 октября 2018

Согласно тому, что я вижу в вашей реализации, the post request всегда будет вызываться кнопкой (TouchableOpacity).Что вы можете сделать, чтобы предотвратить это, это реализовать функцию, которая будет проверять, существует ли текущая post request, прежде чем пытаться запустить a new post request.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...