Project | React - Webucks Clone Coding [Mission 5]
21898 ワード
実施[Mission 5]コーヒー詳細ページコメント
inputウィンドウでコメントを作成し、enterをクリックしてコメント(コメント)を追加してください.(「企業」ボタンではなく「コメントの追加」ボタンを実装できます)
⭐️ My Thoughts
従来のClone Coding Project
と同様に、React
を用いて実現されるプロセスである.違いは、JavaScript
によって機能が実現されるのではなく、React Library
によってコメントが実現されることである.素子の単一属性を用いて実現すれば,JavaScript
万を用いた場合よりも容易に実現できると考えられるが,これは非常に不思議な段階である.
📲 インプリメンテーションコード
-既存のコメントと追加するコメント
=> commentdata.json
[
{
"id": "Kanye West",
"ment": "안녕하세요"
},
{
"id": "Jay-Z",
"ment": "커피 맛좋네요"
},
{
"id": "BTS RM",
"ment": "군만두 먹고싶다"
}
]
=>Detail.js
コメントデータ返却プロセスfunction Detail() {
const [normalComment, normalCommentSet] = useState();
useEffect(() => {
fetch('http://localhost:3000/data/commentdata.json')
.then(res => res.json())
.then(res =>
normalCommentSet(res));
}, []) // 기존 댓글 fetch / public/data 내에 있는 json 데이터를 통해 fetch
const [commentData, commentAdder] = useState([]);
const enter = (e) => {
if (e.key === 'Enter') {
let newArr = [...commentData];
newArr.push(e.target.value);
commentAdder(newArr);
e.target.value = '';
}
} // 새로운 댓글 추가 기능 / 이벤트 키가 'Enter'일 경우 deep copy 후 새로운 댓글 push
これは、既存のコメントのデータ(ユーザID、コメント内容)をjsonファイルに保存してfetch
操作を行い、リターンフェーズで使用するコードである.
=>SingleComment.js
(追加するコメントコンポーネント)import React from "react"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faHeart as regularHeart } from "@fortawesome/free-regular-svg-icons";
import { faHeart as solidHeart } from "@fortawesome/free-solid-svg-icons";
import { useState } from "react";
function SingleComment(props) {
const [heartshape, heartshapeChange] = useState(regularHeart);
function click() {
if (heartshape === regularHeart) {
heartshapeChange(solidHeart);
}
else {
heartshapeChange(regularHeart);
}
} // 댓글마다의 하트 기능을 위한 function (하트를 누를 때마다 모양이 변함)
return (
<div className="comment">
<div class="longment">
<span className="id">{props.id}</span> // 댓글 작성자의 id
<span className="ment">{props.e} // 댓글 내용
</span>
</div>
<div class="longment-button">
<button className="deletebutton" onClick={(e) => { e.target.parentElement.parentElement.remove(); }}>삭제</button>
// 후반부 단계에 구현할 댓글 삭제 내용 (후반 포스팅에서 다룰 내용)
<a href="#" className="commentheart" id={props.index}>
<FontAwesomeIcon
icon={heartshape}
onClick={click}
/> // 댓글 내의 하트버튼
</a>
</div>
</div >
)
}
重複したコメントをComponent
の形で別々に作成することで、React Library
の利点を発揮することができ、複数のコメントをComponent
に印刷することもでき、JavaScript
よりもプロジェクトを容易に行うことができる.(コメントのHeartも削除ボタンも1つの素子で実行できるので本当に便利です.)
=>Detail.js
(追加するコメントコンポーネント) <div className="Allcomment">
{
normalComment && normalComment.map((e, i) => {
return (
<SingleComment
id={e.id}
e={e.ment}
index={i}
/>
)
})
}
</div>
// <Single /> 컴포넌트를 불러와 props.properties를 적용해주고, map을 이용해 댓글을 연새적으로 찍어내줌 (기존 댓글 공간)
<div className="Allcomment">
{
commentData.map((e, i) => {
return (
<SingleComment
id={"G-Dragon"}
e={e}
index={i}
/>
)
})
}
</div>
// <Single /> 컴포넌트를 불러와 props.properties를 적용해주고, map을 이용해 댓글을 연새적으로 찍어내줌 (새로운 댓글 추가될 공간)
書かれたコメントのComponent
およびmap
関数を用いてコメント機能を実現するプロセス.確かにJavaScript
を使うよりも実現しやすい.
▼▼実施画面
🐳 に感銘を与える
React
のComponent
の良さは口頭では味わえない段階で、今回のプロジェクトを通してComponent
の良さを感じました.また,Map
関数と定数データ,Component
を用いてコメントを実現するとともに,単一化操作を簡略化した点が興味深い.ハードコーディングから抜け出すために、これらのComponent
の様々な機能を身につけるためには、より努力して勉強しなければなりません.
Reference
この問題について(Project | React - Webucks Clone Coding [Mission 5]), 我々は、より多くの情報をここで見つけました
https://velog.io/@peaceminusone/Project-React-Webucks-Clone-Coding-Mission-5
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
[
{
"id": "Kanye West",
"ment": "안녕하세요"
},
{
"id": "Jay-Z",
"ment": "커피 맛좋네요"
},
{
"id": "BTS RM",
"ment": "군만두 먹고싶다"
}
]
function Detail() {
const [normalComment, normalCommentSet] = useState();
useEffect(() => {
fetch('http://localhost:3000/data/commentdata.json')
.then(res => res.json())
.then(res =>
normalCommentSet(res));
}, []) // 기존 댓글 fetch / public/data 내에 있는 json 데이터를 통해 fetch
const [commentData, commentAdder] = useState([]);
const enter = (e) => {
if (e.key === 'Enter') {
let newArr = [...commentData];
newArr.push(e.target.value);
commentAdder(newArr);
e.target.value = '';
}
} // 새로운 댓글 추가 기능 / 이벤트 키가 'Enter'일 경우 deep copy 후 새로운 댓글 push
import React from "react"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faHeart as regularHeart } from "@fortawesome/free-regular-svg-icons";
import { faHeart as solidHeart } from "@fortawesome/free-solid-svg-icons";
import { useState } from "react";
function SingleComment(props) {
const [heartshape, heartshapeChange] = useState(regularHeart);
function click() {
if (heartshape === regularHeart) {
heartshapeChange(solidHeart);
}
else {
heartshapeChange(regularHeart);
}
} // 댓글마다의 하트 기능을 위한 function (하트를 누를 때마다 모양이 변함)
return (
<div className="comment">
<div class="longment">
<span className="id">{props.id}</span> // 댓글 작성자의 id
<span className="ment">{props.e} // 댓글 내용
</span>
</div>
<div class="longment-button">
<button className="deletebutton" onClick={(e) => { e.target.parentElement.parentElement.remove(); }}>삭제</button>
// 후반부 단계에 구현할 댓글 삭제 내용 (후반 포스팅에서 다룰 내용)
<a href="#" className="commentheart" id={props.index}>
<FontAwesomeIcon
icon={heartshape}
onClick={click}
/> // 댓글 내의 하트버튼
</a>
</div>
</div >
)
}
<div className="Allcomment">
{
normalComment && normalComment.map((e, i) => {
return (
<SingleComment
id={e.id}
e={e.ment}
index={i}
/>
)
})
}
</div>
// <Single /> 컴포넌트를 불러와 props.properties를 적용해주고, map을 이용해 댓글을 연새적으로 찍어내줌 (기존 댓글 공간)
<div className="Allcomment">
{
commentData.map((e, i) => {
return (
<SingleComment
id={"G-Dragon"}
e={e}
index={i}
/>
)
})
}
</div>
// <Single /> 컴포넌트를 불러와 props.properties를 적용해주고, map을 이용해 댓글을 연새적으로 찍어내줌 (새로운 댓글 추가될 공간)
Reference
この問題について(Project | React - Webucks Clone Coding [Mission 5]), 我々は、より多くの情報をここで見つけました https://velog.io/@peaceminusone/Project-React-Webucks-Clone-Coding-Mission-5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol