인프런, 유데미/한입 크기로 잘라 먹는 리액트
간단한 일기장 프로젝트-State로 사용자 입력처리, useRef
5_hyun
2022. 5. 23. 21:33
반응형
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) {
authorInput.current.focus();
return;
}
if (state.content.length < 5) {
contentInput.current.focus();
return;
}
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>
<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;
state를 통해서 사용자가 input과 textarea에 입력한 것을 실시간으로 받아왔다.
그리고 ref를 이용하여 만약 글자 수를 못넘기면 그 칸에 focus를 두도록 구현했다. ref도 react에서 import해서 사용해야 한다.
state가 중요한 것을 깨달았고 아직 좀 더 익숙해질 필요가 있다고 생각했다.
-결과
반응형