Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- netlify redirect
- 프로그래머스 K_Digital Training
- 리액트
- 리스트 렌더링
- 프로그래머스 데브코스 프론트엔드
- SCSS import
- 쌓임맥락
- 다른컴퓨터에서 git사용
- postcss
- KDT 프로그래머스 데브코스 프론트엔드
- react next
- 고양이 사진 검색기
- SCSS forward
- Spacer
- KDT 프로그래머스
- 폼 입력 바인딩
- Vue
- SCSS extend
- git 같은계정 다른 컴퓨터
- 이벤트 수식어
- vue 지역 컴포넌트
- 프로그래머스 프론트엔드 데브코스
- vuex map
- flex
- vue mixin
- nextjs사용법
- SCSS use
- intersection opserver
- vue 이벤트 수신
- 프로그래머스 데브코스
Archives
- Today
- Total
혼자 적어보는 노트
[React] state async로 인한 오류 useEffect로 처리 본문
state 업데이트 함수는 비동기식(asynchronous) 함수이다.
state를 업데이트를 하고 그 값에 맞춰서 처리하는 함수가 아래에 있을 경우
순서대로 처리가 되지 않아서 오류를 접할 수 있다.
예를들어 아래의 코드를 보자.
function Example(){
let [count, setCount] = useState(0);
let [data, setData] = useState('2를 만들어 주세요')
function handleClick() {
setCount(count+1);
if(count === 2){
setData('2 입니다');
}
}
return(
<div>
<div>{ data }</div>
<button onClick={ handleClick }> count : {count}</button>
</div>
)
}
버튼을 클릭하면 count가 하나씩 증가하고
count가 2가 되었을 때 date를 '2 입니다'로 변경하고 싶을 때 위와 같이 적으면 된다고 생각할 수 있다.
순서상으로 봤을 땐 count를 1 증가시키고 변경된 값이 2가 되면 date를 변경하게끔 짰으니
제대로 동작 할 것이라고 생각할 수 있겠지만
위와 같이 2가 되었는데도 불구하고 data가 변경되지 않았다.
이유는 비동기식 처리 때문에 state가 변경되기 전에 if문이 처리가 되어버리고
그 이후 count를 3으로 올렸을 때 data가 변경되는 것을 확인할 수 있다.
useEffect()를 이용한 오류 해결
function Example(){
let [count, setCount] = useState(0);
let [data, setData] = useState('2를 만들어 주세요')
useEffect(()=>{
if(count === 2){
setData('2 입니다');
}
},[count])
return(
<div>
<div>{ data }</div>
<button onClick={ setCount(count+1) }> count : {count}</button>
</div>
)
}
위와 같이 useEffect를 사용하여 count가 '업데이트' 되었을 때 if문을 실행하게 만들어서
제대로 처리되게 만들 수 있다.
'React' 카테고리의 다른 글
[React] react hooks를 사용한 ScrollToTop / 페이지 이동 시 스크롤 상단으로 초기화 (0) | 2021.11.25 |
---|---|
[React] useRef hook (0) | 2021.11.19 |
[React] Tab Menu 구현 해보기 (0) | 2021.11.17 |
React에서 Redux사용 2 - useSelector / useDispatch hook (0) | 2021.11.16 |
[React] useContext hook (0) | 2021.11.16 |
Comments