TIL_20.08.24 πŸƒπŸ½β€β™‚οΈπŸƒπŸ½β€β™‚οΈ

Doum KimΒ·2020λ…„ 8μ›” 24일
0

TIL

λͺ©λ‘ 보기
33/71
post-thumbnail

Codestates immersive course


React μŠ€ν”„λ¦°νŠΈ

λ¦¬μ•‘νŠΈ μŠ€ν”„λ¦°νŠΈκ°€ 벌써 μ’…λ£Œκ°€ λ˜μ—ˆλ‹€. 일단 이번 μŠ€ν”„λ¦°νŠΈμ—μ„œ 닀룬 λ‚΄μš©μ„ μ‚΄νŽ΄ 보자면

λ¦¬μ•‘νŠΈκ°€ 무엇인지? 또 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλž€ 무엇인가, 클래슀 μ»΄ν¬λ„ŒνŠΈλŠ” 뭐고, state 와 lifeCycle은 λ­”κ°€?

이런 큰 μ£Όμ œλ“€λ‘œ youtube API 검색을 톡해 youtube μ˜μƒμ„ 뢈러였고 iframe을 λ„£μ–΄μ£Όκ³ 

λ‚˜μ€‘μ— λ‹€μ‹œ λ³Ό μ˜μƒμ„ LocalStorage에 λ„£μ–΄μ£Όκ³  또 μ‚­μ œν•˜λŠ” κΈ°λŠ₯κΉŒμ§€ κ΅¬ν˜„μ„ ν–ˆλ‹€.

λ¬Όλ‘  μŠ€νƒ€μΌλ§μ„ μ•ˆν•΄μ„œ λ³΄κΈ°μ—λŠ” λ³„λ‘œμ§€λ§Œ 일단 κΈ°λŠ₯에 μΆ©μ‹€ν•˜λ €κ³  ν–ˆλ‹€.

일단 디렉토리 ꡬ성은 λ‹€μŒκ³Ό κ°™λ‹€.

components 폴더 μ™ΈλΆ€μ—λŠ” root인 index.js와 유튜브 데이터λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜ 둜컬 μŠ€ν† λ¦¬μ§€μ—μ„œ

데이터λ₯Ό κ°€μ Έμ˜€λŠ” λͺ¨λ“ˆμ„ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν–ˆλ‹€.

그럼 μ»΄ν¬λ„ŒνŠΈ ꡬ성을 μ‚΄νŽ΄λ³΄λ©΄ μ•„λž˜ 사진과 κ°™λ‹€.

일단 context APIλ‚˜ redux λ“±μ˜ μƒνƒœ 관리 κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  λͺ¨λ“  stateλ₯Ό App.jsμ—μ„œ κ΄€λ¦¬ν•˜κ³ 

μžμ‹ μ»΄ν¬λ„ŒνŠΈμ— ν•Έλ“€λŸ¬ ν•¨μˆ˜λ₯Ό props둜 λ‚΄λ €μ£Όμ–΄ lifting state up λ°©μ‹μœΌλ‘œ stateλ₯Ό 바꿔주도둝 ν•˜μ˜€λ‹€.

λ”°λΌμ„œ Search μ»΄ν¬λ„ŒνŠΈμ—λŠ” submit을 ν•  λ•Œ input의 valueλ₯Ό App.js의 state둜 보내주고 APIμš”μ²­μ˜ 쿼리 슀트링으둜 넣어쀬닀.

VideoPlayer μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” 검색을 ν•œ 직후 ν™”λ©΄μ—μ„œλŠ” VideoList의 첫번째 μ˜μƒμ΄ λ‚˜μ˜€λ„λ‘ 섀정을 ν•˜μ˜€κ³ 

맀번 κ²€μƒ‰λ§ˆλ‹€ 처리λ₯Ό ν•΄μ€˜μ•Όν•˜λ‹ˆ 검색을 ν•˜λŠ” ν•¨μˆ˜μ—μ„œ λ™μž‘μ„ μ‹œμΌœμ€¬λ‹€.

VideoList μ—μ„œλŠ” 검색 결과둜 λ‚˜μ˜¨ 데이터가 setState되면 props둜 λ°›μ•„μ„œ mapν•¨μˆ˜λ₯Ό μ΄μš©ν•΄

video의 개수 만큼 VideoListEntryλ₯Ό 생성해쀀닀.

VideoListEntryμ—λŠ” 썸넀일, 타이틀, μ„€λͺ…, μ €μž₯ λ²„νŠΌμ΄ λ“€μ–΄κ°€κ²Œ 섀정을 ν•΄μ£Όμ—ˆλ‹€.

μ €μž₯ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ localStorage.setItem을 μ‹€ν–‰ν•˜μ—¬ 값을 video의 정보λ₯Ό μ €μž₯ν•΄μ£Όμ—ˆκ³ 

state에도 μΆ”κ°€λ₯Ό ν•΄μ£Όμ—ˆλ‹€. λ”°λΌμ„œ μ €μž₯을 ν•˜λ©΄ μ¦‰κ°μ μœΌλ‘œ μ €μž₯된 λΉ„λ””μ˜€μ— μΆ”κ°€κ°€ 되고

μ‚­μ œ λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œλ„ λ˜‘κ°™μ΄ filterλ₯Ό 거친 데이터 배열이 setState되고 setItem이 λ˜λŠ” 방식이닀.

λ˜ν•œ componentDidMount λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ 초기 화면에 localStorage에 μžˆλŠ” λΉ„λ””μ˜€λ“€μ„ watchLaterList에 κ·Έλ €μ£Όμ—ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ 검색어 stateκ°€ λ°”λ€” λ•Œλ§ˆλ‹€ 전체 μ»΄ν¬λ„ŒνŠΈκ°€ 리 λ Œλ”λ§λ˜λŠ” ν˜„μƒμ΄ μžˆμ–΄μ„œ App μ»΄ν¬λ„ŒνŠΈλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μžμ‹ μ»΄ν¬λ„ŒνŠΈλ“€μ€ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλΌ React.memoλ₯Ό μ‚¬μš©ν•΄μ„œ λΆˆν•„μš”ν•œ λ Œλ”λ§μ„ 막아 μ£Όμ—ˆλ‹€.

쑰금 μ•„μ‰¬μš΄ 뢀뢄은 μŠ€νƒ€μΌμ„ 인라인 μŠ€νƒ€μΌλ‘œ μž‘μ„±ν–ˆλ‹€λŠ”κ²ƒκ³Ό 과제 ν…ŒμŠ€νŠΈ μš”κ΅¬ν•˜λŠ” μ‚¬ν•­μœΌλ‘œ 클래슀 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν–ˆλ‹€λŠ” 것이닀.

κΌ­ 이뢀뢄은 styled-component와 ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄μš©ν•΄ λ¦¬νŒ©ν† λ§μ„ 해봐야겠닀.

또 reduxκΉŒμ§€λŠ” μ‚¬μš©ν•˜κΈ°μ— λΆˆν•„μš”ν•΄λ³΄μ΄κ³  context API, useReducer 정도 μ΄μš©ν•΄μ„œ μƒνƒœκ΄€λ¦¬λ₯Ό ν•˜λ©΄ 쒋을 κ±° κ°™λ‹€.

내일뢀터 λ¦¬λ•μŠ€ μŠ€ν”„λ¦°νŠΈκ°€ μ‹œμž‘λ˜λŠ”λ° λ‹€λ₯Έ 동기 뢄듀은 잘 ν•˜κ³  κ³„μ‹œλ €λ‚˜ 걱정이 μ‘°κΈˆλœλ‹€.

μ›Œλ‚™ 많고 μ‰½μ§€μ•Šμ€ λ‚΄μš©μ΄ μžˆμ—ˆμ„ν…λ° λ‹€λ“€ 쑰금만 더 νž˜λ‚΄μ„œ ν”„λ‘œμ νŠΈκΉŒμ§€ λ‹¬λ ΈμœΌλ©΄ μ’‹κ² λ‹€.

0개의 λŒ“κΈ€