inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

setEditingId 질문 있습니다!

해결된 질문

313

유진

작성한 질문수 5

0

안녕하세요?

page를 처음 렌더링하고 MsgItem의 수정을 클릭하여 startEdit을 실행하면 setEditingId(x.id)를 실행시키는데요.

바로 console.log(x.id)와 console.log(editingId)를 찍어보면 x.id는 잘 나오는데 editingId의 경우 처음 null 이 오고

계속 전값들이 찍혀서요(계속 클릭한 전 x값들이 editingID에 찍힘). setEditingId 함수로 editingID 값 변경까지 시간 딜레이가 있어서 일까요?

작동은 잘 합니다만, 공부하느라 console.log를 찍어보다 의문점이 들어서요!


 

graphql react rest-api

답변 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