Загрузка изображения из Firebase (React Native)

#javascript #reactjs #firebase #react-native #firebase-storage

# #javascript #reactjs #firebase #react-native #firebase-хранилище

Вопрос:

Я пытаюсь загрузить изображение из хранилища Firebase и отобразить его в своем приложении. Я пытаюсь получить URL-адрес для загрузки следующим образом:

 let imageRef = firebase.storage().ref('users/'   firebase.auth().currentUser.uid   '/'   'userImage');
    imageRef
    .getDownloadURL()
    .then((url) => {
    console.log(url)
    })
    .catch((e) => console.log('getting downloadURL of image error => ', e));
 

Теперь URL-адрес отлично выводится из системы. Однако он недоступен извне этой функции. Если я попытаюсь получить к нему доступ даже сразу после .catch, я получаю следующую ошибку:

Ошибка ссылки: не удается найти переменную: url

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

 <Image source={{uri: url}} />
 

Есть идеи о том, как подойти к этой проблеме и решить ее? Большое спасибо!

Ответ №1:

Решение состоит в том, чтобы сохранить URL-адрес в состоянии компонента, а не в переменной:

 let imageRef = firebase.storage().ref('users/'   firebase.auth().currentUser.uid   '/'   'userImage');
    imageRef
    .getDownloadURL()
    .then((url) => {
      setState({ url: url });
    })
    .catch((e) => console.log('getting downloadURL of image error => ', e));
 

Это не только гарантирует, что метод визуализации сможет его найти, но также и то, что выходные данные будут повторно отображены после вычисления URL.


Если вы используете перехваты, у вас будет что-то вроде:

 const [url, setUrl] = useState();

let imageRef = firebase.storage().ref('users/'   firebase.auth().currentUser.uid   '/'   'userImage');
    imageRef
    .getDownloadURL()
    .then((url) => {
      setUrl(url);
    })
    .catch((e) => console.log('getting downloadURL of image error => ', e));
 

Комментарии:

1. Это потрясающе! Большое спасибо за ваш ответ и ваше любезное объяснение.