React simple diary 프로젝트 2
다른 파일은 이전 진행사항과 동일
DuaryEditor
import React, { useRef, useState } from "react";
const DiaryEditor = () => {
// useRef 함수를 호출해 반환값을 authorInput에 담아줌
// authorInput은 MutableRefObject인데 html dom 요소에 접근할 수 있는 기능을 함
const authorInput = useRef();
const contentInput = useRef();
const [state, setState] = useState({
author: "",
content: "",
emotion: 1,
});
const handleChangeState = (e) => {
setState({
...state,
[e.target.name]: e.target.value,
});
};
const handleSubmit = () => {
if (state.author.length < 1) {
// focus
authorInput.current.focus();
return;
}
if (state.content.length < 5) {
alert("내용은 최소 5글자 이상 입력 하시오");
// focus
return;
}
alert("저장 성공");
};
return (
<div className="DiaryEditor">
<h2>오늘의 일기</h2>
<div>
<input
// authorInput이라는 객체를 통해서input 태그에 접근 가능
// userRef로 생성한 authorInput같은 레퍼런스 객체는 현재 가르키는 값을 current라는 프로퍼티로 불러와 사용할 수 있음
// authorInput.current는 authorInput 태그가 되는거고 focus라는 기능을 사용해 focus 되도록 만든것
ref={authorInput}
name="author"
value={state.author}
onChange={handleChangeState}
/>
</div>
<div>
<textarea
ref={contentInput}
name="content"
value={state.content}
onChange={handleChangeState}
/>
</div>
<div>
<select
name="emotion"
value={state.emotion}
onChange={handleChangeState}
>
<option value={1}>1</option>
<option value={2}>2</option>
<option value={3}>3</option>
<option value={4}>4</option>
<option value={5}>5</option>
</select>
</div>
<div>
<button onClick={handleSubmit}>일기 저장하기</button>
</div>
</div>
);
};
export default DiaryEditor;
실행 화면
author에 입력 글자 1글자 이상
content에 입력 글자 5글자 이상이 되어야만 글 등록이 가능하고, 두 조건을 만족 하지 않으면 focus기능을 활용해 입력란이 bold해 지는 효과를 주었음
Author And Source
이 문제에 관하여(React simple diary 프로젝트 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@aloha006/React-simple-diary-프로젝트-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)