티스토리 뷰
728x90
반응형
1. 컴포넌트 생성
너무 많은 내용을 다룰 수 있기 때문에 컴포넌트를 새로 생성을 해준다.
2. 템플릿 생성
// client > src > components > views > VideoDetailPage > Sections > Comment.js
import React, { useState } from "react";
import Axios from "axios";
import { useSelector } from "react-redux";
function Comment(props) {
return (
<div>
<br />
<p>Replies</p>
<hr />
{/* Comment Lists */}
{/* Root Comment Form */}
<form style={{ display: "flex" }}>
<textarea
style={{ width: "100%", borderRadius: "5px" }}
placeholder="코멘트를 작성해주세요."
/>
<br />
<button style={{ width: "20%", height: "52px" }}>
Submit
</button>
</form>
</div>
);
}
export default Comment;
기본적으로 HTML, CSS를 먼저 적용을 하였다. 이럴 경우 <textarea> 태그는 원래 아무런 입력이 되지 않는다. 그렇기 때문에 여기서 onClick이벤트를 입력하여 내가 텍스트를 입력하였을 때 반응을 보이기 위한 구현을 해야 한다.
(하지만, 필자가 다시 지워보고 테스트할 땐 특별한 문제가 없었다.)
3. onClick 생성
다음으로는 onClick 이벤트를 생성해보았다.
// client > src > components > views > VideoDetailPage > Sections > Comment.js
import React, { useState } from "react";
import Axios from "axios";
import { useSelector } from "react-redux";
function Comment(props) {
const [commentValue, setcommentValue] = useState("");
const handleClick = (e) => {
setcommentValue(e.currentTarget.value);
};
return (
<div>
<br />
<p>Replies</p>
<hr />
{/* Comment Lists */}
{/* Root Comment Form */}
<form style={{ display: "flex" }}>
<textarea
style={{ width: "100%", borderRadius: "5px" }}
placeholder="코멘트를 작성해주세요."
onChange={handleClick}
/>
<br />
<button style={{ width: "20%", height: "52px" }}>
Submit
</button>
</form>
</div>
);
}
export default Comment;
다음과 같이 입력을 할 경우, 이제 어떠한 입력값을 넣어도 값이 입력이 되는 것을 확인할 수 있다.
TMI. currentTarget VS target
currentTarget : 이벤트 핸들러가 부착된 것
4. onSubmit
다음으로는 입력한 값을 서버로 보내는 동작을 구현할 것이다.
// client > src > components > views > VideoDetailPage > Sections > Comment.js
import React, { useState } from "react";
import Axios from "axios";
import { useSelector } from "react-redux";
function Comment(props) {
const [commentValue, setcommentValue] = useState("");
const user = useSelector((state) => state.user);
const videoId = props.match.params.videoId;
const handleClick = (e) => {
setcommentValue(e.currentTarget.value);
};
const onSubmit = (e) => {
e.preventDefault();
const variables = {
content: commentValue,
writer: user.userData._id,
postId: videoId,
};
Axios.post("/api/comment/saveComment", variables).then((response) => {
if (response.data.success) {
} else {
alert("덧글 저장하지 못하였습니다.");
}
});
};
return (
<div>
<br />
<p>Replies</p>
<hr />
{/* Comment Lists */}
{/* Root Comment Form */}
<form style={{ display: "flex" }} onSubmit={onSubmit}>
<textarea
style={{ width: "100%", borderRadius: "5px" }}
placeholder="코멘트를 작성해주세요."
onChange={handleClick}
value={commentValue}
/>
<br />
<button style={{ width: "20%", height: "52px" }} onClick={onSubmit}>
Submit
</button>
</form>
</div>
);
}
export default Comment;
writer부분은 이전에 localstorage에서 가져오는 방법(localStorage.getItem("userId"))을 이용해도 되고, 현재 방법은 리덕스를 통해 가져온 아이디(user.userData._id)를 활용하였다.
다음과 같이 Redux DevTools에서 유저 아이디가 어디 있는지 확인하여 입력할 수 있다.
마지막으로 콘솔로 확인을 하면 된다. content값을 입력 후 Submit버튼을 클릭할 때 아래와 같이 잘 나오면 된다.
일부 params에 대한 오류는 생략하겠습니다. :)
728x90
반응형
'Front-End > React' 카테고리의 다른 글
지난주 삽질이야기 : API 명세서가 이렇게 중요하다. (0) | 2021.07.10 |
---|---|
React-Youtube : 덧글 기능 만들기 (0) | 2021.05.26 |
React-Youtube : 구독페이지 만들기 (0) | 2021.05.02 |
React-Youtube : 구독 기능 UI 및 구현 (0) | 2021.04.29 |
React-Youtube : 디테일 비디오 페이지에서 우측 비디오 리스트 생성 (0) | 2021.04.16 |
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 뷰
- 노드
- node-sass
- 코딩테스트
- node.js
- 파이썬
- 자바스크립트
- react
- 함수
- java
- node
- Coding Test
- programmers
- redux
- 재공부
- javascript
- 리덕스
- Switch
- 리액트
- 자바
- Visual Studio Code
- 리액트 썸네일
- 배열
- mongodb
- CSS
- 리액트 유튜브
- Git
- github
- array
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함