配列をプルしようとすると、データは常に空になります。私のどこが間違っているのか誰か知っていますか? コンソールを確認したところ、私の知る限り、Firebase ストレージへの参照はありますが、データはありませんでした。しかし、私のストレージには URL リンクを出力する必要があるドキュメントが 4 つあります。 これは私のコンポーネントです
リーリー上記のコンポーネントは私が試したもので、リンクされたリストがマッピングされることを期待していましたが、データは表示されませんでした。そして、pdfUrls は常に空です。
問題はここにあります:
リーリーlistAll
とgetDownloadURL
は非同期操作であるため、完了までに時間がかかる場合があります。メイン コードはスクリプト全体をブロックしませんが、操作が行われている間実行を継続し、データ (ファイル リストまたはダウンロード URL) が利用可能になったときにコールバック ブロックを実行します。これは、任意の
urls.push(url);
が実行される前にsetPdfUrls(urls);
が実行され、空のリストが設定されることを意味します。デバッガーでこれを確認するか、ログを追加することをお勧めします。問題を解決する最も簡単な方法は、
リーリーsetPdfUrls(urls);
を 内部コールバックに移動することです:各ダウンロード URL が決定された後に呼び出されます。これにより複数の更新が実行されるため、UI に多少のちらつきが生じる可能性がありますが、データは表示されるはずです。
すべてが完了するのを待っている間に 1 回だけ呼び出すと、
つまり、このコードは次のとおりです:setPdfUrls(urls);
より多くの作業が必要になります。おそらく最も簡単な方法は、useEffect
ハンドラー全体をasync
としてマークし、その中でawait
を使用することです。 リーリー#await- を使用して、
for...of- ループを使用して、ループ内で
setPdfUrls
を呼び出す前に非同期操作が完了していることを確認します。await
を使用できるようにします。