Проблема с использованием AsyncStorage для сохранения входа в React Native с бэкэндом Rails - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь сохранить имя входа, используя AsyncStorage для приложения React Native с бэкэндом Rails. Я не могу понять, как правильно это реализовать. Моя функция setUser работает правильно для setState, но затем я пытаюсь использовать AsyncStorage для сохранения идентификатора пользователя из имени входа. Затем, когда компонент монтируется после повторного открытия приложения, я хотел бы иметь возможность получить userId из AsyncStorage для использования в выборке auto_login.

    const user_id = AsyncStorage.getItem("userId")
    if(user_id) {
      fetch("http://localhost:3000/auto_login", {
        headers: {
          "Authorization": user_id
        }
      })
      .then(res => res.json())
      .then(res => {
        if (res.errors){
          alert(res.errors)
        } else {
          this.setState({ currentUser: res, loggedIn: true})
        }
      })
    }

    fetch(`http://localhost:3000/users`)
    .then(response => response.json())
    .then(users => this.setState({ users: users }))

    fetch(`http://localhost:3000/tasks`)
    .then(response => response.json())
    .then(tasks => this.setState({ tasks: tasks }))
  }

  setUser = (user) => {
    this.setState({
      currentUser: user,
      loggedIn: true
    }, () => {
      AsyncStorage.setItem("userId", user.id)
    })
  }

1 Ответ

0 голосов
/ 30 апреля 2020

AsyncStorage является асинхронным. Вам нужно добавить await:

const user_id = await AsyncStorage.getItem("userId")
...