react-native - 日期时间选择器 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 = () => {
};
解决方案
推荐阅读
- git - Azure Devops Repos - 恢复到以前的提交,就像最近的提交从未存在过一样
- c++ - 是否需要 std::forward 将 rValue 参数传递给 make_ 智能指针函数?
- android - React Native 崩溃 - 仅限三星 Android 10 - apex/com.android.runtime/lib64/bionic/libc.so abort
- c++ - 无法在 CMake 中正确包含第三方库
- python - 如何优化此气流操作员代码以在 celery worker 上使用最少的 RAM?
- sql - 有没有办法使用 REXX 执行免费的 Package 语句?
- r - 用于空间面板数据模型 (SEM & SAC) 的 AIC
- python - 是否有特定的 Sympy 函数来简化方程?
- reactjs - ReactJs 有条件的延迟加载
- r - 如何为间隔创建虚拟变量