setEditingId 질문 있습니다!
안녕하세요?
page를 처음 렌더링하고 MsgItem의 수정을 클릭하여 startEdit을 실행하면 setEditingId(x.id)를 실행시키는데요.
바로 console.log(x.id)와 console.log(editingId)를 찍어보면 x.id는 잘 나오는데 editingId의 경우 처음 null 이 오고
계속 전값들이 찍혀서요(계속 클릭한 전 x값들이 editingID에 찍힘). setEditingId 함수로 editingID 값 변경까지 시간 딜레이가 있어서 일까요?
작동은 잘 합니다만, 공부하느라 console.log를 찍어보다 의문점이 들어서요!
답변 1
0
'시간딜레이'의 개념이 아니라 리액트의 lifecycle과 관련한 것입니다.
리액트의 setState는 동기적으로 동작하지 않습니다.
만약 setState가 동기적으로 작동하게 되면,
화면상에 항상 신뢰할 수 있는 값을 표현할 수 없게 되기 때문입니다.
예를 들어 다음 코드를 보시죠.
const Counter = () => {
const [count, setCount] = useState(0)
return (
<>
{count}
<button onClick={() => setCount(count + 1)}>증가</button>
{count}
</>
)
}
위 코드는 처음 렌더시에는
0 / [증가] / 0
으로 렌더링 되어 있겠죠.
그런데 사용자가 '증가'버튼을 클릭하는 순간
count가 동기적으로 값이 변경된다고 하면,
0 / [증가] / 1
이렇게 렌더링될 것입니다.
다시 클릭하면 1 / [증가] / 2
이런 식으로 계속해서 앞의 숫자와 뒤의 숫자가 서로 달라지겠죠.
따라서 리액트는 한 번의 render 과정 동안에는 '이전상태'의 값을 그대로 유지하고,
렌더링이 완료된 이후에 일어난 동작에 대하여, '모든 상태변경'을 병합하여 일괄 반영한 다음,
비로소 render를 다시 처리하도록 설계되어 있습니다.
질문있습니다 !
0
134
2
sass 오류
0
174
1
does not match
0
164
2
프로젝트 배포
0
299
1
코드 똑같이 쳤는데 scss 적용이 안돼요 ㅠㅠ
0
748
1
scss 스타일 적용
0
478
2
yarn run client시 에러는 안 나는데 호스트가 열리질 않습니다 ㅠㅠ
0
430
1
무한 스크롤 관련 질문 드립니다.
1
513
2
props 를 넘겨줄 때 함수를 그대로 넘겨줄 때와 화살표 함수로 감싸서 넘겨줄 때의 차이가 궁금합니다 :)
0
454
1
getInitialProps 과 getServerSideProps에 대해서 질문드립니다!
0
1144
1
node-sass를 했을 때 에러가 발생합니다.
0
377
1
[소스 다운로드 안됩니다]
0
323
1
rendered HTML error 관련
2
2187
2
닉네임 부분이 잘못되어 있는 것 같습니다.
0
448
2
Typescript 질문드려요!
0
332
1
error 관련하여
1
289
1
질문이 있습니다!.
0
278
1
질문이 있습니다!
0
486
1
수정된 내용까지 확인했는데 에러가 납니다 ㅠ
1
303
2
React Hydration Error 가 나는 이유가 무엇일까요 ?;;
0
631
1
useRef를 선호하시는 이유가 궁금합니다!
1
794
1
react-query 4.0.0 버전에선 에러가 납니다
0
668
1
gql 백틱 안에 색깔 입혀지는 확장프로그램이 어떤건지 알 수 있을까요?
2
685
1
typeScript에 대한 질문을 어디다가 올려야할지 몰라서 여기다가 남깁니다!
0
303
1





