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
- SCSS forward
- 고양이 사진 검색기
- KDT 프로그래머스
- vue 이벤트 수신
- KDT 프로그래머스 데브코스 프론트엔드
- 리스트 렌더링
- 쌓임맥락
- intersection opserver
- vuex map
- vue 지역 컴포넌트
- 프로그래머스 데브코스
- SCSS import
- 프로그래머스 데브코스 프론트엔드
- 다른컴퓨터에서 git사용
- Vue
- 리액트
- react next
- postcss
- 프로그래머스 프론트엔드 데브코스
- vue mixin
- nextjs사용법
- flex
- SCSS use
- netlify redirect
- 폼 입력 바인딩
- Spacer
- git 같은계정 다른 컴퓨터
- 이벤트 수식어
- 프로그래머스 K_Digital Training
- SCSS extend
Archives
- Today
- Total
혼자 적어보는 노트
[React] 비동기 SetState 동기식 처리 본문
state를 업데이트 하다보면
setState로 값을 변경하고 console.log를 찍어보면 변경되기 전의 값이 출력되는 경우가 있다.
setState는 비동기이기 때문에 이부분을 고려해야한다.
해결하는 방법은 무엇이 있을까?
[Class component]
아래는 삭제 버튼을 누르면 searchKeyword가 초기화 되는 코드의 일부분이다.
handleRemove() {
this.setState({
searchKeyword: "", // serchKeyword 초기화
});
console.log(this.state.searchKeyword, "remove"); // 초기화 되기 전의 값이 출력됨
}
state업데이트가 잘 되었는지 console.log를 찍었는데 이전 값이 나온다.
- setState의 callback함수로 해결
handleRemove() {
this.setState({ searchKeyword: "" }, () => {
console.log("remove", this.state.searchKeyword); // 변경된 ""로 출력됨
});
}
// 함수 return시 이런식으로도 아래와 같이 사용가능
handleRemove() {
this.setState(
() => {
return { searchKeyword: "" };
},
() => {
console.log("remove", this.state.searchKeyword);
}
);
}
[Functional component]
const handleRemove = (e) => {
setSearchKeyword("");
console.log(setSearchKeyword) // 변경되기 전 값 출력
}
- useEffect Hook를 사용하여 해결
const handleRemove = (e) => {
setSearchKeyword("")
}
useEffect(() => {
console.log(searchKeyword);
}, [searchKeyword]);
useEffect의 두 번째 인자로 해당state값을 넣어주어 searchKeyword가 변경되었을 때
console.log가 출력되게 한다.
'React' 카테고리의 다른 글
[React] input focus감지 / 영역 밖 클릭 시 이벤트 (0) | 2021.12.14 |
---|---|
[React] key를 사용해야하는 이유 (0) | 2021.12.13 |
[React] immer를 사용한 불변성 관리 (0) | 2021.12.09 |
[React]react에서 redux connent 코드 간소화 (0) | 2021.12.08 |
[React] select 사용하여 option구현 (장바구니옵션) (0) | 2021.12.05 |
Comments