인프런 커뮤니티 질문&답변

동라파덕님의 프로필 이미지
동라파덕

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Redirection

setState 내부, 외부에 명령어를 담을 때의 차이가 궁금합니다.

작성

·

339

0

안녕하세요 go router redirection 강의 듣고 있습니다.

onPressed의 setState 내부에 authState = !authState 를 넣거나, authState = !authState 를 실행하고 setState를 하는 방법에 어떤 차이가 있는 지 궁금합니다.

모두 겉으로 보기에는 잘 작동하는 것 같은데 무엇을 사용해야 더 효율적인 방법인가요?

 

ElevatedButton(
  onPressed: () {
    setState(() {
      authState = !authState;
    });
  },
  child: Text(authState ? 'logout':'login',),
),
ElevatedButton(
  onPressed: () {
    authState = !authState;
    setState(() {
    });
  },
  child: Text(authState ? 'logout':'login',),
),

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

둘 모두 결과적으로 같기는 합니다.

왜냐하면 setState()는 build() 함수를 재실행해주는 함수이며 build() 함수를 재실행 할경우 기존에 변경돼있던 모든 변수값을 새로 반영해서 렌더링을 하기때문이죠.

setState()에 입력되는 콜백 함수도 실제로 setState() 실행과 동시에 바로 실행됩니다. 레퍼런스는 아래에서 봐 볼 수 있습니다.

https://api.flutter.dev/flutter/widgets/State/setState.html

하지만 개발자가 봤을때 직관적으로 느끼는 부분이 다릅니다. 변수 변경은 어디서든 할 수 있지만 setState()의 콜백 내부에 변수 변경을 입력한다면 build() 함수가 재실행되면서 확실히 해당 변수들의 값들이 변경된 상태로 새로 렌더링되기를 기대한다는 뉘앙스를 포함 할 수 있습니다.

감사합니다!

동라파덕님의 프로필 이미지
동라파덕

작성한 질문수

질문하기