일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- sever action
- revalidatepath
- SSR
- 타입스크립트
- 프로그래머스
- @tailwind components
- supabase realtime
- dynamic pages
- @tailwind base
- CSS
- static pages
- render phase
- 리액트
- commit phase
- RECOIL
- client components
- createbrowserrouter
- sever components
- 3진법 뒤집기
- revalidatetag
- js
- 자바스크립트
- @tailwind
- @tailwind utility
- interceptor routes
- server components
- 클로저
- image component
- iron-session
- unstable_nostore
- Today
- Total
개발하는 너구리
TIL-22.10.30 본문
fileInput
-비제어 컴포넌트로 사용
<input>에 value prop 지정X
- 이벤트 객체의 target.value 값이 아니라, target.files 값을 사용
<input type="file" ~ />
useRef()
- DOM노드는 반드시 렌더링이 끝나야 생성됨
- ref객체의 current값도 화면에 컴포넌트가 렌더링됐을때만 존재
cf) 조건부 렌더링 등으로 해당 컴포넌트가 렌더링되지않으면 ref값이 없다
사용절차)
1. Ref객체 생성
import { useRef } from 'react'
// ...
const ref = useRef(); //Ref 객체 생성
2. ref prop 사용하기
<div ref={ref} /> //ref prop에 앞서 생성한 Ref객체 내려줌
3. Ref객체에서 DOM노트 참조하기
const node = ref.current; //Ref객체의 current 프로퍼티 사용해서 DOM노트 참조
--> 변수 node는 Ref객체 내려준 <div>태그 가리킴
URL.createObjectURL() 함수로 object URL 생성
- 리턴값으로 해당파일을 주소처럼 사용할수있는 문자열 리턴(웹브라우저는 메모리를 할당)
- File 객체를 object URL로 만들면 파일에 대한 주소 생성가능. 즉, 사용자 컴퓨터에 있는 파일을 주소로 사용가능하다는것
*파일인풋에 초기화 버튼 만들기
- FileInput의 value속성은 사용자만 직접 수정할수있고,
JS로 수정하려면 '빈문자열'으로만 수정가능
즉, value속성을 '빈문자열'로 바꿔주면 선택한 파일이 초기화
object URL을 만들면 웹브라우저는 메모리를 할당하고, 파일에 해당 주소를 생성
-> 우리가 만든 FileInput 컴포넌트는 렌더링 과정에서 리액트 외부 상태를 변경하게 되는것
-> 즉, 사이드이펙트 발생
사이드 이펙트 정리하기
revokeObjectURL () : 할당메모리 해제
- 파일 선택마다, 메모리를 할당하기만 한다면 메모리 낭비문제 발생
- useEffect()는 사이드 이펙트 만들고 난뒤 정리방법 제공, useEffect 함수내에 정리함수를 리턴해주면됨(리액트는 이 정리함수는 기억)
async, await
- function 앞에 async 붙이면 해당 함수는 promise 반환
- await는 async 함수 안에서만 동작
JS는 await 키워드를 만나면 promise가 처리될때까지 기다림, 처리되면 그 이후 실행
'TIL' 카테고리의 다른 글
TIL-23.03.20 (0) | 2023.03.21 |
---|---|
리액트 버튼 클릭 시 색상 변경 (0) | 2022.11.19 |
TIL-22.10.29 (0) | 2022.10.31 |
TIL-22.10.28 (0) | 2022.10.31 |
TIL-22.10.27 (0) | 2022.10.28 |