【问题标题】:How do I display all of the images from my Firebase Storage in React Native without needing image names?如何在 React Native 中显示我的 Firebase 存储中的所有图像而不需要图像名称?
【发布时间】:2021-05-14 19:29:50
【问题描述】:

您好,我想弄清楚如何在 Firebase 存储中名为“VerifiedPhotos”的文件夹中显示所有图像。我不想像下面那样通过图像名称引用它们,因为我有多个图像。如何获取所有图像 URL 列表并在 React Native 中将它们显示到我的屏幕上?请帮助我整周都在查找如何使用 listAll() 并且我也不确定如何在 return 语句中显示多个图像。请帮忙。

  const Photos = () => {
  const [imageUrl, setImageUrl] = useState(undefined);

  useEffect(() => {
      firebase.storage()
        .ref('VerifiedPhotos/' + '3.png') //name in storage in firebase console
        .getDownloadURL()
        .then((url) => {
          setImageUrl(url);
        })
        .catch((e) => console.log('Errors while downloading => ', e));
    }, []);
  
  return (
      <Image style={{height: 200, width: 200}} source={{uri: imageUrl}} />
  );
}

export default Photos;

【问题讨论】:

    标签: javascript firebase react-native firebase-storage


    【解决方案1】:

    正如文档所说的.listAll()here,您需要遍历结果:

    const Photos = () => {
      const [imageTab, setImageTab] = useState([]);
    
      useEffect(() => {
        firebase.storage()
          .ref('VerifiedPhotos/')
          .listAll()
          .then(function(result) {
              result.items.forEach(function(imageRef) {
                  imageRef.getDownloadURL().then(function(url) {
                      imageTab.push(url);
                      setImageTab(imageTab);
                  }).catch(function(error) {
                      // Handle any errors
                  });
              });
          })
          .catch((e) => console.log('Errors while downloading => ', e));
      }, []);
    
      return (<View>
        {imageTab.map(i => (<Image style={{height: 200, width: 200}} source={{uri: i}} />))}
      </View>);
    }
    
    export default Photos;
    

    让我知道它是否有效:)

    【讨论】:

    • 已编辑:我通过从设置状态单独推送 setImageTab(imageTab); 来修复它
    • 非常感谢您的快速回答。所以我尝试了这段代码,它只有在我刷新代码时才有效。如果我按下加载此代码的按钮,它只会显示一个空白屏幕(在我对代码执行 control 之前不会从 firebase 拉出)。你能帮我解决这个问题吗?另外,如果我在firebase的文件夹中添加新图片,我该怎么做,它会自动将这些更改拉到我的手机屏幕上?谢谢。
    • 没关系,我实际上使用了您的 return 方法以及这个答案的 (stackoverflow.com/questions/64708353/…) useEffect() 方法,现在它正在提取图像。但除非我刷新代码,否则它不会在屏幕上自动拉取更改(例如,如果我删除图像或放置新图像)。你知道我怎么解决这个问题吗?或者我可以将它作为另一个 q 发布,以便人们可以看到完整的代码
    • 乐于助人!是的,请发布另一个问题
    猜你喜欢
    • 2020-11-06
    • 2021-02-18
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多