Session 4 - 최효석 React Hooks 마법. 그리고 깔끔한 사용기
2019년 9월 6일 네이버 쇼핑 개발자 meet up 행사인 'SHOWROOM' 에 발표된 자료입니다.
보다 자세한 내용은 http://nshop-developer.github.io 을 참고해주세요.
(2019년 9월 30일 오후 오픈 예정)
37. // ------------
// 첫번째 render
// ------------
const [name, setName] = useState('Mary')
useEffect(persistForm)
const [surname, setSurname] = useState('Poppins')
useEffect(updateTitle)
// ------------
// 두번째 render
// ------------
const [name, setName] = useState('Mary')
useEffect(persistForm)
const [surname, setSurname] = useState('Poppins')
useEffect(updateTitle)
정상 동작
// 1. 'Mary' 로 name state 초기화
// 2. persistForm 로 render 후에 실행할 effect 추가
// 3. 'Poppins' 로 surName state 초기화
// 4. updateTitle 로 render 후에 실행할 effect 추가
// 1. name state 읽기 (argument 로 ‘Mary’ 는 무시)
// 2. persistForm 로 render 후에 실행할 effect 교체
// 3. surName state 읽기 (argument 로 ‘Poppins’ 는 무시)
// 4. updateTitle 로 render 후에 실행할 effect 교체
38. // ------------
// 첫번째 render
// ------------
const [name, setName] = useState('Mary')
name && useEffect(persistForm)
const [surname, setSurname] = useState('Poppins')
useEffect(updateTitle)
setName(null)
// ------------
// 두번째 render
// ------------
const [name, setName] = useState('Mary')
name && useEffect(persistForm)
const [surname, setSurname] = useState('Poppins')
useEffect(updateTitle)
runtime 시 잘못 작동
// 1. 'Mary' 로 name state 초기화
// 2. persistForm 로 render 후에 실행할 effect 추가
// 3. 'Poppins' 로 surName state 초기화
// 4. updateTitle 로 render 후에 실행할 effect 추가
// 1. name state 읽기 (argument 로 ‘Mary’ 는 무시)
// 2. persistForm 로 render 후에 실행할 effect 교체 (실패)
// 3. 'Poppins' 로 surName state 초기화 (실패)
49. useEffect(effect, list of depedencies)
** list of dependencies
이전 render 의 list of dependencies
현재 render 의 list of dependencies
item 이 다를 때
effect 를 생성
51. const PhotoVideoList : React.FC = ({photoVideoReviewIds}) => {
useEffect(() => {
const fetchPhotoVideoItems = async () => { }
}, [photoVideoReviewIds])
}
특정 props, state 가 변경됐을때만 effect 실행하고 싶어요!
useEffect(effect, list of depedencies)
useEffect(() => {}, [props1, props2, state1, state2])
52. list of dependencies 에는 effect 에서 사용하는 모든
props, state 가
포함되어야 함
const Example = ({ someProp, anotherProp }) => {
const fetch = () => {
fetchItem(someProp, anotherProp)
}
useEffect(() => {
fetch()
}, [someProp])
}
list of dependencies 사용 시 주의할 점