前提・実現したいこと
react/realtime databaseでのいいね機能を実装したいと考えております。
該当のソースコード
react
1 2イメージ => SNSであるようないいね機能の小さいバージョンを作りたいと考えています。 3 4具体的に... 5現在 6いいねすると他の人にも反映されてしまうためいいねボタン個々の管理が出来ていない。 7=>自分の端末でいいねした時に同じ箇所が他の端末でいいねになってしまう。 8 9どうしたいか... 10detabase集計方法として、何が何回いいね押されたか管理したいです。 11 121つ目 = 1回 132つ目 = 3回 14のような構図で管理したいです。 15(どの人がなどの情報は特に付けません。) 16 17 18 const [showHeart, setShowHeart] = useState(false); 19 const [showHeartitems, setShowHeartitems] = useState([]); 20 21・showHeart は、いいねボタン実装の(デザイン)でのtoggleに使っております。 22・showHeartitems は、いいねボタン実装の(デザイン)でのtoggleとデータベース管理に使っています。 23 24-------- 25 26realtime databaseへの管理コードです。↓ 27 28console.log(showHeartitems); 29 30// ↑上記のconsole.logには[1,2,4]などのいいねが配列で渡される形 31 32const toggleShowHeart = (key) => { 33 if (showHeartitems.includes(key)) { 34 setShowHeartitems(showHeartitems.filter(item => item !== key)); 35 firebase.database().ref("/likes").set({likes:showHeartitems.filter(item => item !== key)}); 36 } else { 37 setShowHeartitems([...showHeartitems, key]); 38 firebase.database().ref("/likes").set({likes:[...showHeartitems, key]}); 39 } 40 }; 41 42useEffect(() => { 43 firebase.database().ref("/likes").on("value", (snapshot) => { 44 const data = snapshot.val() 45 if(!data) return 46 setShowHeartitems(data.likes) 47 }) 48}, []) 49 50下記がdatabaseの図 51 52project---- 53 |_likes 54 |_likes 55 |__ 0 2 56 |__ 1 3 57 58------------------ 59 60<div className="heart-back" id="heart-back" onClick={() => toggleShowHeart(photo.key)} style={{backgroundColor: showHeartitems.includes(photo.key) ? "#E0306C" : "white"}}> 61{/* 本体 */} 62 <FaHeart className="faheart" id="faheart" onClick={() => toggleShowHeart(photo.key)} style={{color: showHeartitems.includes(photo.key) ? "white" : "#E0306C"}}/> 63</div> 64 65上記のコードはいいねボタンの実装となっております。 66
あなたの回答
tips
プレビュー