1. React - Udemy react 강의
module.css를 import 할 때
import classes from "./AddUser.module.css"
<Card className={classes.input}>
input 활용
type="text"
/ type="number"
/ type="textarea"
입력된 내용이 없을 때 !
를 쓸 수도 있고
enteredUsername.trim().length === 0
trim으로 공백을 제거한 길이가 0일 때를 쓸 수 있다.
형제 컴포넌트끼리 데이터를 주고 받아야 할 때
...prev,~
Math.random().toString()
으로 무작위 숫자를 문자열로 넣기generateRandomString(num)
UserList
컴포넌트는 AddUser가 전해준 데이터를 App.jsx를 통해 props로 받아 쓸 수 있다.component 재사용의 중요성
jsx문법은 하나의 element만 있어야 하기 때문에 가끔 <div>
로 전체를 감싸줘야 할 필요가 있다.
Wrapper
컴포넌트를 만들어 쓰는 방법도 있다.<> </>
항상 작동하지는 않음. 프로젝트 설정이 지원한다면 사용해도 괜찮다.<React.Fragment>
내장된 wrapper 사용{Fragment}
import 후 <Fragment>
로 사용 가능the specified value cannot be parsed, or is out of range.
if (event.target.name === "userName")
수업에서는 alert를 주지 않았지만 UX를 향상시키기 위해 내용이 입력되지 않았을 때 alert 추가 및 useRef 이용해 해당 input에 focus
userName과 userAge가 입력되었지만 age가 1이하일 때로 변경 및 유효성 검사 추가(+focus)
2. Typescript TimeAttak
React 과제 refactoring
리액트 숙련 과제(redux) refactoring
npm i --save-dev @types/styled-components
설치해서 해결 document.get~focus()
부분을 type정의 하기 어려워서 useRef()로 바꿈
대원의 도움을 받아 해결
const content_input = useRef<HTMLInputElement>(null);
추가적으로 조건문에 input.current를 넣어줘야 한다.
2. React - Component Lifecycle 강의
컴포넌트가 Mount, Update, Unmount되는 과정
setState는 비동기적이다.
console.log는 동기적이다.
batching(일괄처리)
useEffect는 렌더링 과정에서 실행되지 않고 return이 끝면서 Mount된 후에 실행 된다.
useQuery
data?map
혹은 return문 위에 if(isLoading)~
등의 예외 처리를 해야 한다.