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
- 호이스팅
- 넘블
- pushstate
- fetch 취소
- 웹팩
- 매클로태스크
- JavaScript
- 렉시컬 환경
- 화살표 함수
- localtunnel
- 자바스크립트
- 유사배열
- AbortController
- 마이크로태스크
- debounce
- 이벤트 루프
- 호출 스택
- Call stack
- webpack
- 번들러
- 실행 컨택스트
- 비동기 작업
- 로드마크
- 함수형
- 이터러블
- hoisting
- 로컬터널
- relatedTarget
- 클론코딩
- Lexical environment
Archives
- Today
- Total
내가 보려고 만든 개발 공부 일지
React hooks 에서 useState setter 함수 작동 순서 본문
const [val, setVal] = useState(true);
const someFunc = ()=>{
setVal(false);
setVal(true);
}
return (
{val ? null : <div> message! </div>}
)
위의 예제 코드에서 하고자 하는 일은,
어떤 이벤트 발생 시 div 태그를 한번 제게했다가 다시 보이게 하려는 것이다.
그래서 위처럼 set을 연달아 다른 값으로 해주면 div가 null 됐다가 다시 그려질줄 알았는데 그렇게 되지않았다..
(함수형 업데이트 방식으로 해도 동일했다)
원인 : setter 함수는 비동기적으로 실행되기 때문
즉, js 작업스택에 작업들이 모두 비워진 이후에
호출된 모든 훅들을 다 처리한 후 렌더링을 하기 때문에 위 상황에서 val 는 false가 되어도 그게 화면에 반영되진않고
반영되는건 마지막값인 true 이기 때문이다.
그래서 div 태그는 실제로 null 이 된적이없고 이전상태 그대로 화면에 보여지게 되는것이다.
'다양한 삽질들' 카테고리의 다른 글
keydown 이벤트 한글 중복 입력 현상 (2) | 2021.12.23 |
---|---|
ExpressJS의 use 함수 (0) | 2021.07.02 |
Comments