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
- 커스텀훅
- 메타태그
- 3-21
- 오픈그래프
- ContextAPI
- 옵셔널 체이닝
- open gragh
- 변수선언
- 리액트쿼리
- customHook
- ReactQuery
- JavaScript
- 실수
- CSS
- 리눅스 명령어
- GIT
- 동적메타태그생성
Archives
- Today
- Total
나를 위한 기록
배치 업데이트 - 팬레터 수정 기능 구현 중 궁금했던 부분 본문
궁금했던 부분
아래 코드에서 상태 업데이트 시 setEditContent("")와 setClickedLetter({...clickedLetter, content: editContent})를 동시에 호출해도 문제가 없는데, 왜 그런지 궁금했다.
이렇게 쓰면 왠지 editContent가 이미 "" 로 업데이트 돼버렸을 것 같았기 때문이다.
const handleCompleteEdit = () => {
const updateLetters = letters.map((letter) =>
letter.id === clickedLetter.id
? { ...letter, content: editContent }
: letter
);
setLetters(updateLetters);
setEditMode(false);
setEditContent("");
setClickedLetter({ ...clickedLetter, content: editContent });
alert("수정이 완료되었습니다.");
};
이유
React에서는 상태 업데이트가 비동기로 처되기 때문이다.
setEditContent("")와 setClickedLetter({...clickedLetter, content: editContent})는 동일한 렌더링 사이클에서 동시에 실행되지 않는다. React는 업데이트를 일괄 처리하고(배치처리), 한 렌더링 사이클 내에서 한 번만 업데이트를 수행한다.
따라서 setEditContent("")와 setClickedLetter({...clickedLetter, content: editContent})는 동시에 실행되지 않고, React 엔진이 상태 업데이트를 일괄적으로 처리하고 난 후에 각각 실행된다.
이런 특성으로 인해 업데이트가 비동기로 처리되기 때문에 이전 상태를 사용하여 다음 상태를 계산할 수 있다,.
만약 위 내용이 동기적으로 처리된다면 setEditContent("") 이후에 setClickedLetter({...clickedLetter, content: editContent})를 호출하면 editContent는 이미 빈 문자열로 설정되어 있을 것이다.
'Today I Learned' 카테고리의 다른 글
styled-components 동적 생성과 자동 포커스 이슈 해결 (1) | 2023.11.20 |
---|---|
[november 17] React-Router-DOM (0) | 2023.11.17 |
React-Router-DOM (0) | 2023.11.16 |
[November 16] 논리 AND 연산자 && 를 사용하여 조건부 렌더링 (0) | 2023.11.16 |
[November 15] Redux설정, Store에서 값 읽어오기, useSelector / useDispatch 사용하기 (0) | 2023.11.15 |