javascript - 从 Firebase 下载图像(React Native)
问题描述
我正在尝试从 Firebase Storage 下载图像并将其显示在我的应用中。我试图获取下载网址的方式如下:
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 之后立即访问它,则会收到以下错误:
ReferenceError:找不到变量:url
这当然意味着当我尝试以下列方式显示图像时,我无法调用 url:
<Image source={{uri: url}} />
关于如何解决这个问题并解决它的任何想法?非常感谢!
解决方案
解决方案是将 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));
这不仅可以确保 render 方法可以找到它,而且可以在计算 URL 后重新渲染输出。
如果你使用 hooks,你会有类似的东西:
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));
推荐阅读
- ionic-framework - 离子页脚在用户输入时被推到键盘上方
- javascript - 反应中的双重条件渲染?
- docker - 为什么重新启动 Docker 应用程序会提高我的容器(Web 应用程序)的性能?
- java - 使用 XmlOptions 从 xml 中删除 DOCTYPE 及其包含的标签
- python - 逆一个python字典,其中值是列表
- docker - 在 docker 容器中安装 ffmpeg 包
- c++ - 发送带有 libcurl C++ 问题的帖子请求:s
- javascript - 我如何编写一个函数,该函数迭代一系列不同数量的元素,提取 4 个顺序数组
- powershell - 我如何使用 Set-AIPFileLabel = Unprotect-RMSFile -OutputFolder
- microsoft-teams - Microsoft-Teams:由于“到达此应用程序时出现问题”错误,无法测试个人选项卡