setState의 비동기 이유

Lee Tae-Sung·2022년 12월 25일
0

React.js

목록 보기
23/26

React를 사용하면서 setState가 왜 비동기였어야만 했을까 의문을 가졌었다.

앞에서 prev 인자를 사용하면 된다는 것을 확인했지만 setState를 사용한 후 바로 화면에 적용시키면 유기적으로 바뀌는 것을 확인하며 프로그래밍 하기 쉽지 않았을까

그런데 setState가 비동기여야만 하는 이유가 존재한다.

setState는 기본적으로 실행되면 render를 한번더 실행시키게 된다.

그렇다면 한 함수 안에 set 함수가 여러개 존재할 경우
하나 실행되면 render되고 다음 하나 실행되면 render 되고 set가 있을때마다 render가 실행되는 비효율이 발생하게 된다.

여기서 고민해봐야할게

const [first, setFirst] = React.useState()

=> useState의 data를 어떤 범위 정도로 선언할 것이냐인데

const [object, setObject] = React.useState({
        name: 'ts',
        age: 10,
        sex: 'm'
      });
      
const [name, setName] = React.useState();
const [age, setName] = React.useState();
const [sex, setName] = React.useState();

=> 다음처럼 실제로 state 에는 다양한 형식의 데이터들이 들어갈 수 있다.

여기서 setObject({...object, ~~~} 를 해도 상관은 없지만 만약 좀더 명확하게 setName 처럼 하나하나 분리한다고 한다면 set함수가 연속으로 여러개 들어가야할 가능성이 크다. (제로초님은 쪼개는걸 추천)

그러므로 react는 set함수의 반복으로 인한 render 함수의 실행을 알아서 안시킨다. 그렇기에 이 set함수들이 정상작동하기 위해서는 비동기 로직을 따라야하는것이다.

=> 또한 쉽게 생각하면 ...object를 하면 쉽게 생각할 수 있는데 ... 은 프론트의 효율을 생각하면 지양해야하는 문법이다.

profile
긍정적인 에너지를 가진 개발자, 이태성입니다.

0개의 댓글