React Native: ComponentDidMount не будет обновлять AsyncStorage.getItem - PullRequest
0 голосов
/ 08 марта 2019

В моем приложении есть один класс (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, этот способ работает, однако мне пришлось бы дважды нажать значок колокольчика, чтобы обновить его до нужного.

...