AsyncStorage & Drawer отображает всегда ноль - PullRequest
1 голос
/ 04 июня 2019

У меня есть экран входа в систему с кнопкой, запомните меня, и когда я подключаюсь, я хотел бы сохранить эту информацию в asynsctorage, например:

    if (this.isFormValid()) {
      AccountService.login(login, password)
        .promise.then(body => {
          console.log('onLoginClick -> body', body)
          Keyboard.dismiss()
          AsyncStorage.setItem('login', login)
          if (this.state.isRememberMeSelected) {
            console.log("i'm in the storage !")

            AsyncStorage.multiSet([['login', login], ['password', 
              password], ['isRememberMeSelected', '1']])
          } else {
            AsyncStorage.multiSet([['login', ''][('password', '')], 
            ['isRememberMeSelected', '0']])
          }

когда я возвращаюсь к своему ящику, я пытаюсь прочитать хранилище и получить значение "isRememberMeSelected":

 async componentDidMount() {
    // await AsyncStorage.getItem('login').then(value => {
    //   console.log('DrawerLogin', value)
    //   //this.setState({login: value})
    // })
    // await AsyncStorage.getItem('password').then(value => {
    //   console.log('DrawerPassword', value)
    //   //this.setState({password: value})
    // })
    await AsyncStorage.getItem('isRememberMeSelected').then(value => {
      console.log('DrawerIsRememberMeSelected', value)

      this.setState({isRememberMeSelected: value})
    })

    // await AsyncStorage.getAllKeys((err, keys) => {
    //   console.log(' Allkeys', keys)
    // })
    } 

В моем ящике я проверяю значение «isRememberMeSelected», чтобы удалить некоторые элементы:

  StorageMultiRemove = async () => {
       try {
         await AsyncStorage.multiRemove(['refreshToken', 
         'stripeCustomerId', 'token'], err => {
           console.log(' Dans multiRemove Error', err)
         })
       } catch (error) {
         // Error saving data
       }
     }

        isRememberMeSelected === '1' ? this.StorageMultiRemove() : 
         AsyncStorage.clear()

когда я возвращаюсь в свой ящик, это значение и всегда равно нулю, КРОМЕ, если я выйду из приложения и перезапущусь ... там все хорошо установлено ....

Я хорошо вписываюсь в свое состояние (то, которое было до выполнения моего setItem) ...

Я бы хотел записать эти данные в asynStorage, вернуться в мой ящик и получить эти значения в наличии

1 Ответ

1 голос
/ 05 июня 2019

Вы можете добавить переменную, которая будет изменяться при получении асинхронного хранилища

class Myform extends React.Component {
  state = {
    loading: true
}

тогда в компоненте смонтировано обновление состояния

 componentDidMount() {
    await AsyncStorage.getItem('isRememberMeSelected').then(value => {
      console.log('DrawerIsRememberMeSelected', value)
      this.setState({
        isRememberMeSelected: value,
        loading: false
       })
    })
  }

и в рендере

render() {
   if(loading) return;  // could return loading spinner or something
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...