엔터 키로 입력하기
더보기
👉 엔터 키를 입력하면 댓글이 입력되도록 해봅시다 🙂
onKeyPress 이벤트를 이용해서 엔터 키를 감지하고, 엔터 키가 눌리면 댓글을 저장하도록 해줄거예요.
//components/CommentWrite.js
import React from "react";
import { Grid, Input, Button } from "../elements";
import { useDispatch } from "react-redux";
import { actionCreators as commentActions } from "../redux/modules/comment";
const CommentWrite = (props) => {
const dispatch = useDispatch();
const { post_id } = props;
const [comment_text, setCommentText] = React.useState("");
const write = () => {
if (comment_text === "") {
window.alert("댓글을 입력해주세요!");
return;
}
// 입력된 텍스트는 지우기!
setCommentText("");
// 파이어스토어에 추가합니다.
dispatch(commentActions.addCommentFB(post_id, comment_text));
};
return (
<React.Fragment>
<Grid padding="16px" is_flex>
<Input
placeholder="댓글 내용을 입력해주세요 :)"
_onChange={onChange}
value={comment_text}
onSubmit={write} // ***
is_submit
/>
<Button width="50px" margin="0px 2px 0px 2px" _onClick={write}>
작성
</Button>
</Grid>
</React.Fragment>
);
};
CommentWrite.defaultProps = {
post_id: "",
};
export default CommentWrite;
import React from "react";
import styled from "styled-components";
import { Text, Grid } from "./index";
const Input = (props) => {
const {
label,
placeholder,
_onChange,
type,
multiLine,
value,
is_submit,
onSubmit, // ***
} = props;
if (multiLine) {
return (
<Grid>
{label && <Text margin="0px">{label}</Text>}
<ElTextarea
rows={10}
value={value}
placeholder={placeholder}
onChange={_onChange}
></ElTextarea>
</Grid>
);
}
return (
<React.Fragment>
<Grid>
{label && <Text margin="0px">{label}</Text>}
{is_submit ? (
<ElInput
type={type}
placeholder={placeholder}
onChange={_onChange}
value={value}
onKeyPress={(e) => { // ***
if(e.key === "Enter"){
onSubmit(e);
}
}}
/>
) : (
<ElInput type={type} placeholder={placeholder} onChange={_onChange} />
)}
</Grid>
</React.Fragment>
);
};
Input.defaultProps = {
multiLine: false,
label: false,
placeholder: "텍스트를 입력해주세요.",
type: "text",
value: "",
is_submit: false,
onSubmit: () => {},
_onChange: () => {},
};
const ElTextarea = styled.textarea`
border: 1px solid #212121;
width: 100%;
padding: 12px 4px;
box-sizing: border-box;
`;
const ElInput = styled.input`
border: 1px solid #212121;
width: 100%;
padding: 12px 4px;
box-sizing: border-box;
`;
export default Input;
'항해 중 > 5주차 리액트 심화반' 카테고리의 다른 글
추가 - 삭제 기능 (0) | 2021.12.03 |
---|---|
추가 - 좋아요 기능 (0) | 2021.12.03 |
4주차 - 댓글 알림 뱃지 만들기 (0) | 2021.12.03 |
4주차 - 댓글 작성하기 (0) | 2021.12.02 |
4주차 - 상세 페이지 연결하기 + fireStore 복합 쿼리 (0) | 2021.12.02 |
댓글