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

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

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

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

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

Q&A

解決済

1回答

1012閲覧

Propsの値を別のコンポーネントに引き渡しができない

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

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

0グッド

0クリップ

投稿2021/10/16 12:10

編集2021/10/16 12:12

いつもお世話になっております

現在Youtubeの動画(2.02.56付近)を参考にSnapchatのWeb版をReactを利用し作成しています

その過程で、Propsの値を別のコンポーネントに引き継ぐことができずにいます

詳しい方がいればご教授いただけると幸いです

ーー起きている問題ーー
Chats.jsから「key, id, username, timestamp, imageUrl, read, profilePic」をChat.jsに引き渡しているはずなのですが、表示されません

現状の画像↓
現状
目標の画像↓
目標
firebaseの内部↓
firebaseの内部

ーー試したことーー
・キャッシュのクリア=>変化なし
・useEffect内のdbが上手く行っていない(処理が終了する前にステート更新されてるから空の配列のままかと)と予測して、Async awaitを使用=>変化なし

AsyncAwait

1useEffect(() => { 2 const f = async () => { 3 await db.collection("posts") 4 .orderBy("timestamp", "desc") 5 .onSnapshot((snapshot) => 6 setPosts( 7 snapshot.docs.map((doc) => ({ 8 id: doc.id, 9 data: doc.data(), 10 })) 11 ) 12 ); 13 }; 14 f(); 15 }, []);

ーーコードーー

Chats

1import { Avatar } from '@mui/material'; 2import React, { useEffect, useState } from 'react'; 3import './Chats.css'; 4import SearchIcon from '@mui/icons-material/Search'; 5import ChatBubble from '@mui/icons-material/ChatBubble'; 6import { db } from "./firebase"; 7import Chat from './Chat'; 8 9function Chats() { 10 const [posts, setPosts] = useState([]); 11 12 useEffect(() => { 13 db.collection("posts") 14 .orderBy("timestamp", "desc") 15 .onSnapshot((snapshot) => 16 setPosts( 17 snapshot.docs.map((doc) => ({ 18 id: doc.id, 19 data: doc.data(), 20 })) 21 )); 22 }, []); 23 24 return ( 25 <div className="chats"> 26 <div className="chats__header"> 27 <Avatar className="chats__avatar" /> 28 <div className="chats__search"> 29 <SearchIcon /> 30 <input placeholder="Friends" type="text" /> 31 </div> 32 <ChatBubble className="chats__chatIcon" /> 33 </div> 34 <div className="chats__posts"> 35 {posts.map(({ 36 id, 37 data: { profilePic, username, timestamp, imageUrl, read }, 38 }) => ( 39 <Chat 40 key={id} 41 id={id} 42 username={username} 43 timestamp={timestamp} 44 imageUrl={imageUrl} 45 read={read} 46 profilePic={profilePic} 47 /> 48 ))} 49 </div> 50 </div> 51 ); 52} 53 54export default Chats

Chat

1import React from 'react'; 2import './Chat.css'; 3import { Avatar } from '@mui/material'; 4import StopRoundedIcon from '@mui/icons-material/StopRounded'; 5import ReactTimeago from 'react-time-ago'; 6 7function Chat({ id, username, timestamp, read, imageUrl, profilePic }) { 8 return ( 9 < div className="chat" > 10 <Avatar className="chat__avatar" src={profilePic} /> 11 <div className="chat__info"> 12 <h4>{username}</h4> 13 <p> 14 Tap to view - {" "} 15 <ReactTimeago date={new Date(timestamp?.toDate()).toUTCString()} /> 16 </p> 17 </div> 18 19 {!read && <StopRoundedIcon className="chat__readIcon" />} 20 </div > 21 ) 22} 23 24export default Chat

ーーCSSのコードーー(可能性としてheightなどの大幅なズレがあるかと考え、確認しました)

Chats

1.chats{ 2 position: relative; 3 height: 400px; 4 width: 250px; 5} 6 7.chats__header{ 8 display: flex; 9 justify-content: space-between; 10 align-items: center; 11 padding-left: 10px; 12 padding-right: 10px; 13 background-color: #059ee0; 14 height: 50px; 15} 16 17.chats__search > input{ 18 outline: none; 19 background-color: transparent; 20 border: none; 21 font-size: 12px; 22 flex: 1; 23 color: white; 24} 25 26.chats__search > ::placeholder{ 27 color: white; 28 opacity: 1; 29} 30 31.chats__posts{ 32 box-shadow: 1px -7px 7px -6px rgba(0, 0, 0, 0.44); 33 height: 359px; 34 margin-top: -9px; 35 border-top-left-radius: 10px; 36 border-top-right-radius: 10px; 37 background-color: white; 38 overflow: scroll; 39} 40 41.chats__posts::-webkit-scrollbar{ 42 display: none; 43} 44 45/*hide scrallbar from edgr and firefox*/ 46.chats__posts{ 47 -ms-overflow-style: none; /*for Edge*/ 48 scrollbar-width: none;/*for firefox*/ 49} 50 51.chats__avatar{ 52 height: 25px !important; 53 width: 25px !important; 54} 55 56.chats__search{ 57display: flex; 58align-items: center; 59flex: 1; 60padding-left: 8px; 61}

Chat

1.chat { 2 display: flex; 3 align-items: center; 4 justify-content: space-between; 5 padding: 8px; 6 border-bottom: 1px solid whitesmoke; 7 cursor: pointer; 8} 9 10.chat__avatar { 11 height: 35px !important; 12 width: 35px !important; 13} 14 15.chat:hover { 16 opacity: 0.8; 17} 18 19.chat__readIcon { 20 color: red; 21} 22 23.chat__info { 24 padding-left: 11px; 25 flex: 1; 26} 27 28.chat__info > h4 { 29 font-size: 11px; 30 font-weight: 500; 31} 32 33.chat__infor > p { 34 font-size: 9px; 35}

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

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

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

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

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

guest

回答1

0

ベストアンサー

Chats.js

JavaScript

1useEffect(() => { 2 //firebase grammaly has changed 3 const f = async () => { 4 const postsRef = db.collection('posts'); 5 const snapshot = await postsRef.get(); 6 //console.log(typeof snapshot) 7 console.log(Object.keys(postsRef)); 8 let items = []; 9 snapshot.forEach(doc => { 10 items.push({ id: doc.id, data: doc.data() }) 11 }); 12 setPosts(items); 13 } 14 f(); 15 }, []);

投稿2021/10/17 06:32

編集2021/10/17 06:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問