質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

732閲覧

【React + firebase】Stateに値を入れることができない

yupapapa

総合スコア24

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/11/15 05:48

const [images, setImages] = useState([]) const upload = async () => { setIsSending(true) const list = [] await Promise.all(previewImages.map(async image => { const uploadRef = firebase.storage().ref('images').child(image.id) const uploadTask = uploadRef.put(image.blob) const snapshot = await uploadTask const url = await snapshot.ref.getDownloadURL() const n ={ id: image.id, path: url } list.push(n) })) console.log(list) //きちんと値が挿入されている setImages(list) console.log(images) //空の配列になる await firebase.firestore().collection('posts').add({ //images: images, (この場合、空の配列としてfirebaseに保存される) images: list //きちんと想定した値が挿入される }) setPreviewImages([]) setImages([]) setIsSending(false)

React + firebase で、このような画像を複数firebase上に保存する処理があります。

listという空の配列を作成し、ループの中でlistに画像情報を挿入していき、最終的にはlistをfirebaseに保存する際の値としてそのまま渡しています。(この実装ではうまくいく)

本来、imagesというstateを用意しているのですが、setImages(list)をしても、imagesに値を挿入することはできません。

この場合、stateを利用せずに、関数内で配列を作成してその配列をfirebaseの値として使うということは、正しい実装方法なのでしょうか。
それとも、setImagesにきちんと値を反映させて、images: imagesとするべきなのでしょうか。
ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問