【问题标题】:POST request sent on a second or a third click of the input button, why?在第二次或第三次单击输入按钮时发送 POST 请求,为什么?
【发布时间】:2018-10-28 10:56:32
【问题描述】:

因此,我的代码中的所有内容都按预期工作,只有在第二次甚至第三次单击按钮时才发送发布请求...我猜它与我更新的方式有关redux 状态,但是我的大脑僵住了,谁能指出我的错误在哪里?

干杯!

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);

编辑:

我所做的是,我已将我的 redux 更新状态放入 componentWillUpdate 并将其从 onPressHandler 中删除。现在它几乎可以正常工作,例如,如果我进入 London Str. 36 它将 POST 请求 London Str. 3、它不会将最后一个字母或数字发送到服务器...这是怎么回事?

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

【问题讨论】:

  • 您是否尝试过关闭所有形式的调试/日志记录?有时控制台语句或调试器会降低应用的性能。
  • 嗨 Uzair,是的,我也尝试过打开 RN 调试器,但它同样只是更快,当然,我仍然需要点击按钮上的 2x 来发送发布请求。

标签: javascript reactjs react-native react-redux axios


【解决方案1】:

根据我在您的实现中看到的,the post request 将始终由按钮调用 (TouchableOpacity)。您可以做些什么来防止这种情况发生,即实现一个功能,该功能将在尝试触发 a new post request 之前检查是否存在正在进行的 post request

【讨论】:

  • 您好,我实际上想在每次点击时发送帖子请求,因为帖子发送后,它会弹出页面,如果该帖子已发送,则有条件该页面不会出现。问题是我在调试器中看到一个动作被调度,弹出页面但没有发送req,然后当我第二次尝试时,req 被发送......
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
相关资源
最近更新 更多