Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Firebase下载图像(React本机)_Javascript_Reactjs_Firebase_React Native_Firebase Storage - Fatal编程技术网

Javascript 从Firebase下载图像(React本机)

Javascript 从Firebase下载图像(React本机),javascript,reactjs,firebase,react-native,firebase-storage,Javascript,Reactjs,Firebase,React Native,Firebase Storage,我正在尝试从Firebase存储下载图像并在我的应用程序中显示它。我尝试获取下载url的方式如下: let imageRef = firebase.storage().ref('users/' + firebase.auth().currentUser.uid + '/' + 'userImage'); imageRef .getDownloadURL() .then((url) => { console.log(url) }) .catch

我正在尝试从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之后立即访问它,则会出现以下错误:

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后重新呈现输出


如果你喜欢,你会有这样的东西:

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));

太棒了!非常感谢你的回答和善意的解释。