728x90
1. handleSubmit에 조건문, focus문 추가
2. DOM에 접근하는 useRef() 사용
DiaryEditor.js
import { useRef, useState } from "react";
const DiaryEditor = () => {
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) {
alert("작성자는 최소 1글자 이상 입력해주세요.");
authorInput.current.focus();
// focus
return; // 더이상 출력 안되도록 막기
}
if (state.content.length < 5) {
alert("일기 본문은 최소 5글자 이상 입력해주세요.");
contentInput.current.focus();
// focus
return;
}
console.log(state);
alert("저장 성공");
};
return (
<div className="DiaryEditor">
<h2>오늘의 일기</h2>
<div>
<input
ref={authorInput}
name="author"
value={state.author}
onChange={handleChangeState}
/>
</div>
<div>
<textarea
ref={contentInput}
name="content"
value={state.content}
onChange={handleChangeState}
/>
</div>
<div>
<span>오늘의 감정점수 : </span>
<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;
728x90
'🤯TIL > React' 카테고리의 다른 글
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 2 - 데이터 추가하기 (0) | 2023.11.19 |
---|---|
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 1 - 리스트 렌더링 (조회) (2) | 2023.11.19 |
[한입 크기로 잘라 먹는 리액트] React에서 사용자 입력 처리하기 (0) | 2023.11.17 |
[React vs JavaScript] React란? (0) | 2023.11.04 |
[코딩앙마] 영어 단어장 CRUD_v6기준 (0) | 2023.07.31 |