728x90
1. DiaryList.js 파일 생성
2. App.js에 추가
3. 임시배열 만들어서 prop으로 전달
4. DiaryList가 undefined로 전달될 경우 에러 해결
5. DiaryItem.js 생성
App.js
import "./App.css";
import DiaryEditor from "./DiaryEditor";
import DiaryList from "./DiaryList";
const dummyList = [
{
id: 1,
author: "도로시",
content: "하이 1",
emotion: 5,
created_date: new Date().getTime()
},
{
id: 2,
author: "나로시",
content: "하이 2",
emotion: 3,
created_date: new Date().getTime()
},
{
id: 3,
author: "다로시",
content: "하이 3",
emotion: 1,
created_date: new Date().getTime()
},
{
id: 4,
author: "라로시",
content: "하이 4",
emotion: 5,
created_date: new Date().getTime()
},
{
id: 5,
author: "마로시",
content: "하이 5",
emotion: 5,
created_date: new Date().getTime()
},
];
function App() {
return (
<div className="App">
<DiaryEditor />
<DiaryList diaryList={dummyList} />
</div>
);
}
export default App;
DiaryList.js
import DiaryItem from "./DiaryItem";
const DiaryList = ({ diaryList }) => {
console.log(diaryList);
return (
<div className="DiaryList">
<p>일기 리스트</p>
<h5>{diaryList.length}개의 일기가 있습니다.</h5>
<div>
{diaryList.map((it) => (
<DiaryItem key={it.id} {...it} />
))}
</div>
</div>
);
};
DiaryList.defaultProps = {
diaryList: [],
};
export default DiaryList;
DiaryItem.js
const DiaryItem = ({ author, content, created_date, emotion, id }) => {
return (
<div className="DiaryItem">
<div className="info">
<span>
작성자 : {author} | 감정점수 : {emotion}
</span>
<br />
<span className="date">{new Date(created_date).toLocaleString()}</span>
</div>
<div className="content">{content}</div>
</div>
);
};
export default DiaryItem;
App.css
/* App */
.App {
}
/* editor */
.DiaryEditor {
border: 1px solid gray;
text-align: center;
padding: 20px;
}
.DiaryEditor input,
textarea {
margin-bottom: 20px;
width: 500px;
}
.DiaryEditor input {
padding: 10px;
}
.DiaryEditor textarea {
padding: 10px;
height: 150px;
}
.DiaryEditor select {
width: 300px;
padding: 10px;
margin-bottom: 20px;
}
.DiaryEditor button {
width: 500px;
padding: 10px;
cursor: pointer;
}
/* List */
.DiaryList {
border: 1px solid gray;
padding: 20px;
margin-top: 20px;
}
.DiaryList h2 {
text-align: center;
}
/* List Item */
.DiaryItem {
background-color: rgb(240, 240, 240);
margin-bottom: 10px;
padding: 20px;
}
.DiaryItem span {
margin-right: 10px;
}
.DiaryItem .info {
border-bottom: 1px solid gray;
padding-bottom: 10px;
margin-bottom: 10px;
}
.DiaryItem .date {
color: gray;
}
.DiaryItem .content {
margin-bottom: 30px;
margin-top: 30px;
font-weight: bold;
}
.DiaryItem textarea {
padding: 10px;
}
한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지 - 인프런 | 강의
개념부터 독특한 프로젝트까지 함께 다뤄보며 자바스크립트와 리액트를 이 강의로 한 번에 끝내요. 학습은 짧게, 응용은 길게 17시간 분량의 All-in-one 강의!, 리액트, 한 강의로 끝장낼 수 있어요.
www.inflearn.com
728x90
'🤯TIL > React' 카테고리의 다른 글
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 3 - 데이터 삭제하기 (0) | 2023.11.19 |
---|---|
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 2 - 데이터 추가하기 (0) | 2023.11.19 |
[한입 크기로 잘라 먹는 리액트] React에서 DOM 조작하기 - useRef (0) | 2023.11.17 |
[한입 크기로 잘라 먹는 리액트] React에서 사용자 입력 처리하기 (0) | 2023.11.17 |
[React vs JavaScript] React란? (0) | 2023.11.04 |