# #javascript #firebase #react-native #expo
Вопрос:
Я новичок в реагировании на родной язык и все еще учусь на практике. Я загрузил изображения в firebase, которые я хочу показать на втором экране. Хотя я продолжаю получать такие ошибки, как
can't find variable: profileImageUrl
Я пытаюсь восстановить изображение на следующей странице.
Вот код для загрузки в firebase:
const uploadImage = async () => {
const blob = await new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = function () {
resolve(xhr.response);
};
xhr.oneerror = function () {
reject(new TypeError('Network request failed'));
};
xhr.responseType = 'blob';
xhr.open('GET', image, true);
xhr.send(null);
});
const ref = firebase.storage().ref().child('/ankit/');
const snapshot = ref.put(blob);
snapshot.on(
firebase.storage.TaskEvent.STATE_CHANGED,
() => {
setUploading(true);
},
(error) => {
setUploading(false);
console.log(error);
blob.close();
},
() => {
snapshot.snapshot.ref.getDownloadURL().then((url) => {
setUploading(false);
console.log('downlaod url', url);
return url;
});
}
);
};
А вот код для извлечения:
const [Image, setImage] = useState(false);
let imageRef = firebase.storage().ref('/ankit/');
imageRef
.getDownloadURL()
.then((url) => {
setImage({ profileimageUrl: 'url' });
})
.catch((e) => console.log('getting downloadURL of image error => ', e));
return (
<View>
<Image source={this.state.profileImageUrl}></Image>
</View>
)
Ответ №1:
Вам следует провести рефакторинг кода, отображающего изображение. Вы используете новое состояние крючков для хранения состояния, но пытаетесь использовать его в html
синтаксисе старого синтаксиса состояния реакции. Вот как это должно быть:
const [image, setImage] = useState(false);
useEffect(() => {
let imageRef = firebase.storage().ref('/ankit/');
imageRef
.getDownloadURL()
.then((url) => {
setImage(url);
})
.catch((e) => console.log('getting downloadURL of image error => ', e));
},[])
return (
<View>
<Image src={image}></Image>
</View>
);
Комментарии:
1. Большое вам спасибо @Tarik Huber Это работает без каких-либо ошибок, но новый экран поставляется без какой-либо картинки. Хотя я вижу это на огневой базе.
2. Можете ли вы, пожалуйста, попробовать запустить обновленный код. Может быть, вы просто забыли положить его в
useEffect
3. Получена эта ошибка: Предупреждение: Неудачный тип опоры: Неверная опора
source
, поставляемаяImage
.4. Я думаю, так и должно быть
src
. Я обновил ответ.5. Спасибо за ответ, но я получил эту ошибку «Компоненту <Image> требуется свойство <Image>
source
, а неsrc
«.