엘리스 SW 엔지니어 트랙 50일차
온라인 강의날
오늘은 Hooks에 들어간다
함수 컴포넌트의 꽃이라고 하신다
워드프레스 만질 때도 많이 보였던 Hook
비슷하지 않을까 생각된다
Hooks
컴포넌트에서 데이터 관리(State)
데이터 변경될 때 상호작용(Effect) 하기 위해 사용
지금까지 사용했던 useState가 State Hook
Hook 등장 배경
State와 생명주기 관리하려고 클래스 컴포넌트 사용했다
근데 클래스 컴포넌트 잠깐 봐도 복잡하지 않나?
이걸 해결하기 위해 Hook이 나왔다
Hook 주의사항
- React 함수(컴포넌트, Hook) 안에서만 사용 가능
- 이름은 반드시 'use'로 시작 예. useState
- 최상위 중괄호 안에서만 사용가능
State Hook
useState는 동적인 데이터 관리할 수 있는 Hook
// state hook 예시 1
const App = () => {
const [ count, setCount ] = useState(0)
}
// state hook 예시 2
const App = () => {
const [ title, setTitle ] = useState("")
// 직접 변경
setTitle("Hello")
// 현재 값을 매개변수로 받아서 리턴
setTitle((current) => {
return current + " World"
})
}
Effect Hook
함수 컴포넌트에서 side effect 수행 가능
=> 어떤 값이 변할 때 내가 설정한 함수가 실행
실행 조건
- 최초 렌더링시
- 지정한 State, Prop이 변경될 때
State나 Prop을 지정안하면 한 번만 실행되겠지
useEffect 예시
1. 최초로 실행되니까
우선 0회 클릭했습니다 뜨고
2. 누를 때 마다 count가 변하니까
console.log가 실행된다
// useEffect 예시
const App = () => {
const [ count, setCount ] = useState(0)
useEffect(() => {
console.log(`버튼을 ${count}회 클릭했습니다.`)
}, [ count ])
return (
<div>
<button onClick={() => setCount(count + 1)}>
클릭
</button>
</div>
)
}
useEffect 내에서 다른 함수를 return 하면
state가 변경되서
컴포넌트가 다시 렌더링되기 전,
컴포넌트가 없어질 때 호출된다
그 외 자주 쓰이는 Hooks
useMemo, useCallback, useRef
useMemo(함수, 배열)
저장을 하는 녀석일까?
useMemo 사용 예시
firstName이나 lastName이 바뀔 때
풀네임으로 계산해서 저장을 해둔다
const App = () => {
const [lastName, setLastName ] = useState("김")
const [firstName, setFirstName ] = useState("철수")
// 성과 이름이 바뀔 때마다 풀네임을 저장(메모이제이션)
const fullName = useMemo(() => {
return `${firstName} ${lastName}`
}, [firstName, lastName])
}
렌더링 단계에서 이루어진다
useMemo 잘못쓰면 성능이 떨어진다고 한다
작은 거에서는 상관 없다고 한다
useCallback
함수를 메모이제이션하기 위해 사용
useMemo는 변수를 메모이제이션,
useCallback은 함수를 메모이제이션
useCallback 사용 예시
const App = () => {
const [lastName, setLastName ] = useState("김")
const [firstName, setFirstName ] = useState("철수")
// 성과 이름이 바뀔 때마다,
// 풀네임을 return하는 '함수'를 저장(메모이제이션)
const getFullName = useCallback(() => {
return `${firstName} ${lastName}`
}, [firstName, lastName])
return<>{getFullName()}</>
}
useRef
컴포넌트 생애 주기 내에서 유지할 ref 객체 반환
useRef에 의해 반환된 ref객체가
변경되어도 컴포넌트 다시 렌더링 X
ref.current 이렇게 사용하는데
event.target이랑 같은일을 한다
useRef 사용 예시
const App = () => {
const inputRef = useRef(null)
const onButtonClick = () => {
inputRef.current.focus()
}
return (
<div>
<input ref={inputRef} type="text" />
<button onClick={onButtonClick}>input으로 포커스</button>
</div>
)
}
위까지 리액트 기초를 배우고
To do 리스트 실습!
컴포넌트 나누고
state 관리하고
CSS하고 등등
'Web Dev > ELICE' 카테고리의 다른 글
52 :: 좋은 앱, React 스타일링, Sass, styles-components (0) | 2022.01.05 |
---|---|
51 :: state, 링크, React 렌더링 (0) | 2022.01.04 |
49 :: Props, State, 이벤트 (0) | 2022.01.01 |
48 :: State, useState, Data Set (0) | 2021.12.30 |
47 :: SPA, React, CRA, JSX, Component (0) | 2021.12.29 |