inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

만들면서 배우는 리액트 : 기초

33 setState 더 알아보기- 함수, 지연초기화

useState 초기값 질문

1000

You Zheng

작성한 질문수 12

2

선생님 useState 초기값 설정할때 

 const [like, setLike] = React.useState(() => {
    return Number(localStorage.getItem('like')) || 0;
});

이렇게 함수로 넘기면 re-rendering 할 때마다 실행되지 않고 

처음 한 번만 실행이 되는 건가요? 

이게 그냥 문법이 그런거면 이해하고 넘어가겠는데~ 

 

다른 이유가 있는거면 

왜 그렇게 되는지 이해가 잘 되지 않아서요 😂

 함수로 넘기면 그렇게 되도록 리액트 내부적으로 처리가 되는건지...

( useEffect가 적용이 되는건지) 

 

javascript react

답변 1

4

진유림

좋은 의문이에요~

알고 계신 것처럼 리액트는 매 렌더링마다 모든 코드를 실행합니다.

const [like, setLike] = useState(비싼초기계산값)

여기서 '비싼초기계산값' 코드가 매 렌더마다 실행되고, 첫 렌더링 이후의 실행값들은 무시됩니다 (이미 업데이트된 state값을 들고 있으니까요).

 

하지만 아래처럼 함수를 넘기면

const [like, setLike] = useState(() => get비싼초기계산값());

함수인 () => get비싼초기계산값() 은 매 렌더링마다 불리지만 실제 비싼계산은 "get비싼초기계산값"이 실행(call된다고 하죠)되는 첫 렌더링때만 수행합니다.

 

정리해보면

1. 값으로 바로 초기화하든, 함수로 지연초기화하든 리액트는 매 렌더링마다 모든 코드를 실행

2. 다만 (리액트 문법에 따라) 함수로 지연초기화하면 실제 내부함수 실행은 초기렌더링에만 실행

 

입니다.

 

 

API 적용 안되는 코드 수정 방법입니다.

0

85

1

고양이 이미지가 엑박이 뜨네요

0

65

1

npx 명령어 사용 불가

1

86

1

const 변수와 컴포넌트의 차이

0

94

1

강의노트

0

146

1

vite로 리액트 빌드한 후 깃허브에 배포하는 방법

0

340

1

빌드할때 dist 폴더가 만들어지는데요,

0

798

1

js파일 업로드 요청

0

139

1

변경된 api 사용시 text 안나오는 문제

0

151

1

메인글자수정...

1

283

3

디렉터리 구조 관련하여 참고할 만한 예시가 있을까요?

1

315

1

https://cataas.com/undefined 로 나오는데 왜그런건가요?

1

609

4

고양이 사진이 깨져요.ㅜㅜ

2

363

3

강의 노트 위치를 모르겠습니다

1

347

1

깃 강의노트 어디서 볼 수 있나요?

1

382

2

이해가 안되는 부분이 있어요

1

366

1

api가 안불러와지네요...

1

671

4

진유림 선생님 너무 궁금해서 질문드립니다 ㅜ

1

338

2

react에서 컴포넌트 만들 때 대문자를 쓰는 이유

2

1162

2

https://cataas.com/ 여기 도메인이 죽어서 이미지가 보이지 않습니다 ㅠ

1

336

2

index.js 내용이 바꼈네용

1

321

2

프로젝트에 사용할 상태와 로직 관리 라이브러리 훅 사용 질문입니다.

1

263

2

html 코드 오류

1

465

2

고양이 이미지 깨져요

1

343

2