首页 > 解决方案 > 日期时间选择器 setState 搞砸了我的状态

问题描述

我有一个异步函数,可以在其中加载数据并更新状态:

constructor(props) {
    super(props);
    this.state = {
      userData: {},
      isDateTimePickerVisible: false,
    };
  }

componentDidMount() {
    this.getUser();
}

getUser = async () => {
    const { navigation } = this.props;
    const tenantID = navigation.getParam('userID', '0');
    await this.props.getUserByID(tenantID); // Wait for action to complete
    this.setState({
      userData: this.props.userData
    });
};

然后我使用状态数据来填充我的 render() 的输入值。但是,我在组件中添加了一个 DateTimePicker,在该组件中打开了 onFocus 输入中的 DateTimePicker:

<Input
    style={styles.valueText}
    onFocus={this.showDateTimePicker}
    value={getFormattedDate(EndDate)}
/>
<DateTimePicker
    isVisible={this.state.isDateTimePickerVisible}
    onConfirm={this.handleDatePicked}
    onCancel={this.hideDateTimePicker}
    date={EndDate}
/>

处理显示/隐藏/更新日期的方法:

showDateTimePicker = () => {
    this.setState({
      isDateTimePickerVisible: true
    });
  };

  hideDateTimePicker = () => {
    this.setState({
      isDateTimePickerVisible: false
    });
  };

  handleDatePicked = date => {
    const obj = { ...this.state.userData };
    obj.LeaseStartDate = date;
    this.setState({
      userData: obj
    });
    this.hideDateTimePicker();
  };

当我第一次打开页面时,this.state.userData 中没有任何数据。但是,如果我删除方法“showDateTimePicker”和“hideDateTimePicker”,那么 this.state.userData 在我第一次加载页面时就有数据。为什么会这样?

谢谢

即使我在没有 setState 的情况下保留这些方法,它也确实有效。但是,如果我删除这些方法,它就会起作用。

showDateTimePicker = () => {

  };

  hideDateTimePicker = () => {

  };

标签: react-nativeredux

解决方案


推荐阅读