inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

처음 배우는 리액트 네이티브

useState

setState 함수의 동작에 대해 질문 있습니다(2)

265

Rancho Kim

작성한 질문수 3

0

(아래 코드 참조하여)

질문 :

setCount에 함수를 인자로 넣었을 때는

setCount가 동기적으로 작동을 하는 이유가 무엇인지

이해가 잘 가지 않습니다. 동기적으로 작동을 한다기보다는

인자로 넣어진 함수의 count 인자가 setCount 실행 당시

그 직전 count 값을 잘 참조하고 있는 것 같은데 이렇게 실행되는

이유가 궁금합니다.

const Counter = () => {
  const [count, setCount] = useState(0);
  return (
      <>
        <StyledText>count : {count}</StyledText>
        <Button title='+' onPress={() => {
          
          console.log('set 카운트1 전 count : ' + count);
          setCount(count =>   {
            console.log('count1 : ' + count);
            return count + 1
          });
          console.log('set 카운트1 후 count : ' + count);
          setCount(count =>   {
            console.log('count2 : ' + count);
            return count + 1
          });
          console.log('set 카운트2 후 count : ' + count);

         

        }}/>
      </>
  )

}

javascript react-native

답변 1

0

김범준

안녕하세요,

 

setCount 함수의 파라미터로 함수를 전달했을 때 동작방식이 왜 그렇게 동작하는 것인지 묻는 것이라면,

"리액트에서 그렇게 동작하게 만들었습니다" 라고 답변 드릴 수 밖에 없습니다.

그리고 이런 상태 변경 함수 사용 방법을 함수형 업데이트라고 합니다.

 

앞의 질문과 이어지는데, setCount를 호출해도 상태변수 count는 계속 변화가 없고, 리렌더링 되었을 때 변경된 값을 확인할 수 있습니다.

setCount에 전달한 함수 파라미터 count에는 이전 상태 변수의 값이 들어오는데, 만약 위에서 상태 변수를 수정했다면 변경 예정인 상태 변수의 값이 들어옵니다.

 

useState아래에 console.log로 현재 count 상태 변수를 체크해보면 리렌더링 될 때 상태 변수가 변경되는 것을 확인할 수 있습니다.

사실 이 말도 조금 더 정확하게 얘기하면, 리렌더링 될 때 상태 변수가 변경되는 것이 아니라, "상태 변수가 변경되어서 리렌더링 되는 것입니다."

 

즐거운 하루 되세요

감사합니다.

 

0

김범준

추가로, 아직 강의 초반인데 useState가 조금 더 궁금하다면,

섹션6 2번째 강의에서 useState를 조금 더 자세하게 설명하니, 이 강의를 확인해 보시기 바랍니다.

맥북 m4에서 nvm으로 설치불가

0

119

2

expo 사용하지 않고 앱 실행 시, 데이터 불러오기

0

350

1

리덕스강의는 없나요?

0

275

1

선생님 도와주세요 ㅠㅠ (로그인, 회원가입, 콘솔 에러)

0

507

1

버젼 업데이트

0

428

1

expo start중 metro bundler가 같이 실행되지 않아요

0

505

1

모바일 expo 실행오류

0

854

1

안드로이드에서 expo실행이 안되요

0

852

2

터미널 다운 및 사용방법

0

297

1

expo init 에러

0

744

2

안녕하세요. 스택네비게이션 문제 질문드립니다 ㅜ

0

327

1

배포중 에러 해결이 안되네요.. ㅜㅜ

1

3230

1

안녕하세요! 강의 Chat App - Part 1 회원가입 부분에서 firebase 관련 에러가 납니다.

0

695

1

styled-components 에러

0

405

1

OS 네이트브 코드를 개발하면서 UI 를 리액트 네이티브로

0

494

1

저장하면 바뀐값들 보여야하는데 재렌더링이 안일어납니다..

0

506

1

안드로이드스튜디오 EXPO 어플 튕깁니다 ㅠㅠ

0

288

1

styled component를 사용하면 터집니다 ㅠㅠ

0

414

1

attrs, 속성, props 가 혼란스럽습니다.

0

352

1

안녕하세요, 강의 잘 들었습니다 :) RN과 파이어베이스 관련해서 질문드릴게 있습니다!

0

586

1

자꾸 The request timed out 에러가 뜹니다 .

0

1939

1

코드 좀 봐주세요 버튼 두개가 생성이 안되요

0

284

1

expo 실행시 스타일 속성 바로 보려면 어디서 보나요?

0

434

1

자바스크립트 () => 의미는요???

0

448

2