В моем приложении есть один класс (NotificationScreen), который изменяет время до того, как происходит уведомление (за 5 минут до, 10, 20 и т. Д.). Способ использования AsyncStorage с setItem и getItem выглядит следующим образом:
Компонент componentDidMount обновляет состояние / текст в соответствии с выбранным временем.Он получает элемент, и если его изначально нуль (когда пользователь впервые использует приложение), он установлен на 30 минут раньше, а если нет, то он получает значение, которое было выбрано.
componentDidMount = () =>{
AsyncStorage.getItem(this.accessKeyTime).then(value => {
if(value == null){
this.setState({ timeSelected: '30'})
console.warn("time set to 30")
}
else {
this.setState({ timeSelected: value})
console.warn("time set to " + value)
}
});
}
Это вСредство выбора мод, когда пользователь выбирает время и нажимает «Готово». AsyncStorage устанавливает состояние для любого «варианта».
onSubmit={(option) => {
AsyncStorage.setItem(this.accessKeyTime, option).then(() => {
this.setState({ timeSelected: option});
}).then(console.warn("time set to " + option));
}}
В другом классе [Bell.js] (который является компонентом, вызываемымДРУГОЙ класс), где делаются уведомления, у меня есть componentDidMount, который изменяет состояние timeSelected.Поэтому, когда пользователь хочет изменить количество времени до получения уведомления, он должен изменить время со страницы NotificationScreen, и оно должно отражаться обратно в Bell.js, когда пользователь нажимает на компонент звонка.
componentDidMount = () =>{
this.setState({
fireDate:this.props.fireDate,
LaunchStatus: this.props.LaunchStatus,
ID: this.props.ID,
TitleName: this.props.TitleName,
});
AsyncStorage.getItem(this.accessKeyTime).then(value => {
if(value == null){
this.setState({ timeSelected: 30*60000}) //Changes to milliseconds
this.setState({timeShow: 30})
console.warn("time set to 30")
}
else {
this.setState({ timeSelected: parseInt(value,10)*60000}) // is string at first but changes to int for notification firedate
this.setState({timeShow: value})
console.warn("time set to " + value)
}
});
}
ОШИБКА: Когда я меняю время в NotificationScreen, оно не меняется в Bell.js, пока я не закрою приложение (не обновлю его) и не открою его.Я попытался поместить getItem из Bell.js и поместить его в onPress для Bell ICON, этот способ работает, однако мне пришлось бы дважды нажать значок колокольчика, чтобы обновить его до нужного.