일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CI/CD
- app router
- useAppDispatch
- autosize
- CORS
- 태그된 유니온
- 공변성
- recoil
- 인터섹션
- 리터럴 타입
- async/await
- Cypress
- tailwind
- React
- dfs
- Jest
- 결정 알고리즘
- Promise
- 반공변성
- 투포인터
- webpack
- 호이스팅
- RTK Query
- map
- 이분 검색
- SSR
- 타입 좁히기
- 무한 스크롤
- TS
- ESlint
Archives
- Today
- Total
짧은코딩
간단한 일기장 프로젝트-State로 사용자 입력처리, useRef 본문
반응형
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가 중요한 것을 깨달았고 아직 좀 더 익숙해질 필요가 있다고 생각했다.
-결과
반응형
'인프런, 유데미 > 한입 크기로 잘라 먹는 리액트' 카테고리의 다른 글
데이터 추가하기 (0) | 2022.05.24 |
---|---|
리스트 렌더링 (0) | 2022.05.24 |
React 기초-State, Props (0) | 2022.05.22 |
React 기초-creat react app, jsx (0) | 2022.05.22 |
React를 사용해야 하는 이유 (1) | 2022.05.19 |
Comments