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

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

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

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

React.js

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

Q&A

0回答

386閲覧

[React+Firestore] update機能がうまく動作しない&onChange不具合

DaisukeMori

総合スコア225

Firebase

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

React.js

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

0グッド

0クリップ

投稿2020/06/26 09:09

前提

フロントエンド React
バックエンド Firestore

要件

Firestoreのupdateがしたい。

FirestoreにauthNameというキーで情報をアップロードしました。(これはすでにできている)

次にその内容を書き換えることをしたいのですがうまく書き換わりません。
(updatedAtは更新されているのでFirestoreと紐づいてはいるのは確認済)

また、onChangeも不具合があるようでフォームに文字を書き込もうとしてもうまく作動していないようです。

Firestore画像(一部モザイクかけています)
イメージ説明

コード全文

jsx

1import React, { useState } from 'react'; 2import { useForm } from 'react-hook-form'; 3import firebase, { db } from '../../Firebase'; 4import { useCollectionData } from "react-firebase-hooks/firestore"; 5 6const Update = () => { 7 const { register, handleSubmit, errors } = useForm(); 8 9 const user = firebase.auth().currentUser; 10 let authId; 11 let authName; 12 13 if (user != null) { 14 user.providerData.forEach(() => { 15 authId = user.uid; 16 authName = user.displayName; 17 }); 18 } 19 20 // Update 21 const [name, setName] = useState(); 22 const [pending,setPending] = useState(false); 23 const updatedAt = firebase.firestore.FieldValue.serverTimestamp(); 24 25 const OnSubmit = async (uid) => { 26 setName(''); 27 setPending(true); 28 try { 29 await firebase 30 db 31 .collection('users') 32 .doc(uid) 33 .update({ 34 updatedAt, 35 authId, 36 authName, 37 }); 38 } finally { 39 setPending(false); 40 } 41 } 42 43 // Render 44 const [ list, loading, error ] = useCollectionData(db.collection('users').orderBy('createdAt', 'desc'), { idField: 'docId' }); 45 46 if (loading) return <div>Loading...</div>; 47 if (error) return <div>Error...</div>; 48 49 return ( 50 <> 51 <h2>Update</h2> 52 53 {list.map(item => ( 54 <div key={item.docId + String(new Date())}> 55 {authId === item.authId ? ( 56 <> 57 <form onSubmit={handleSubmit(OnSubmit)} className=""> 58 <input 59 className="" 60 value={ name } 61 onChange={ e => setName(e.target.value) } 62 placeholder="" 63 name="authName" 64 ref={register({ required: true })} 65 /> 66 <button type="submit" onClick={ () => OnSubmit(item.docId) } className="post-button">Update</button> 67 { pending && 'Pendeing...' } 68 </form> 69 </> 70 ) : ( 71 <> 72 ...省略 73 </> 74 )} 75 </div> 76 ))} 77 </> 78 ); 79} 80 81export default Update;

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問