티스토리 뷰

카테고리 없음

setState 관하여

동기는 2021. 4. 7. 16:49

이번에 [] 에 담긴 state 들의 버튼을 클릭했을때  배열에 있는 값들이 하나도 사라지지않고 카운트 1을 했을때 그 숫자에 맞는 버튼이 +1이되어 카운트를 올리는 걸 작업하게되었다....

 

생각을 했지만 난 너무 배열에 약하다는 생각도 했다 ㅠ 그건 계속 실무를 통해서 배워나가는 수 밖에 없지만...

이따가 setState 에 관해서 정리를 해봐야겠다. 일단 setState 는 비동기함수이다

 

 

 

setState 는 컴포넌트의 state 객체에 대한 업데이트를 실행한다

state 가 변경되면, 컴포넌트는 리렌더링된다.

 

그러면 근본적으로 

state 와 props 의 차이점은 뭘까?

props 와 state 는 일반 javaScript 객체이다.

두 객체 모두 렌더링 결과물에 영향을 주는 정보를 갖고 있는데,

여기서 차이점은 props 는 컴포넌트에 전달되는 반면에  state 는 컴포넌트 안에서 관리가 된다.

 

react 에서 this.props 와 this.state 는 모두 렌더링된 값을 나타내는데 쉽게 말해서 현재 화면에 보이는 값들을 얘기한다

 

setState 호출은 비동기적으로 이루어지며, 그래서 setState 호출 직후 바로 새로운 값이 this.state 에 반영될거 라고 

믿어서는 안된다

 

 

그럼 setState 는 언제 비동기적일까?

 

setState 는 이벤트 핸들러 내에서 비동기적이다!

만약에 부모와 자식이 모두 click 이벤트에서 setState 를 호출한다면 자식은 두번 렌더링 되지 않는다.

하지만 react 는 브라우저 이벤트가 끝나는 그 시점에 state 를 일괄적으로 업데이트 시켜준다.

 

근데 그럼 여기서 의문이 더 들수있다.

왜 state 를 동기적으로 업데이트 시키지 않을까?

react 에 모든 컴포넌트가 자신의 이벤트 핸들러에서 setState() 를 호출할때 까지

React 는 리렌더링을 하지 않고 내부적으로 기다리고 있는다.

이것을 통해서 불필요한 렌더링을 방지 하면서 성능을 향상시킨다.

그런데 왜 react 는 리렌더링 대신 즉시 this.state 를 업데이트 하지 않는지가 더 궁금할수도 있는데

그 이유는 2가지!

 

1.props 와 state 사이의 일관성을 해칠수있고 이런 행위는 디버깅을 할때 매우 힘들어 질수있기에!

2.현재 작업중인 새로운 기능들을 구현하기 힘들게 만들수도 있다.

 

 

 

[useState]

 

useState 는 컴포넌트가 렌더링 할때 오직 한번만 생성되기 때문에 Create 라는 이름은 정확하지 않음....

컴포넌트가 다음 렌더링을 하는동안 useState 는 현재 state 를 준다.

 

const [ fruit , setFruit ] = useState('bababa');

 

위 자바스크립트 문법은 "배열 구조 분해" 라고 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함