인프런 커뮤니티 질문&답변

최연수님의 프로필 이미지
최연수

작성한 질문수

실전 리액트 프로그래밍

렌더링 속도를 올리기 위한 성능 최적화 방법3

마지막 user관련 예제에서요!

해결된 질문

작성

·

220

4

UserDetail의 초기화를 위해 key를 사용한다고 말씀해주셨는데요.

만약 로그인 정보가 바뀌면 user가 바뀌면서 속성값이 바뀌는거니까 key를 입력안해줘도 자연스럽게 초기화되는거 아닌가요..?!

답변 3

2

최연수님의 프로필 이미지
최연수
질문자

매번 이해가 너무 잘되게 답변해주셔서 너무 감사드립니다!

2

이재승님의 프로필 이미지
이재승
지식공유자

안녕하세요
말씀하신대로 속성값은 잘 바뀝니다

문제는 상태값인데요
UserDetail 안에서 사용자의 닉네임을 변경하는 UI 가 있었다고 가정해볼게요
그러면 input 요소가 있을 것이고 키보드로 입력하는 값을 관리하는 newNickname 이라는 상태값이 있을겁니다
key 속성이 없다면 newNickname 은 초기화되지 않아서 문제가 될 수 있습니다

0

1. key의 변동이 있어야 자식 컴포넌트가 unMount후에 다시 mount되서 newNickName 상태값이 초기화된다고 이해하면 될까요?

2. state가 업데이트되면 컴포넌트가 unMount된 후 다시 mount되도 최신의 state를 유지하는 경우를 보는 데

해당 컴포넌트에 key값을 새로 주면 unMount->mount시에 모든 상태값이 초기화되는 걸로 이해하면 될까요?

이재승님의 프로필 이미지
이재승
지식공유자

안녕하세요
1번: 맞습니다
2번: 첫 줄에서 말씀하신 내용은 이해를 못했습니다. 두 번째 줄에서 물어보신건 맞습니다

key 를 입력하지 않거나 key 값이 변하지 않으면 unmount 되지 않으므로 기존 state 가 계속 유지됩니다

답변 너무 감사합니다. 

1. state가 변경된 후 컴포넌트가 리렌더링 되는 것은 컴포넌트가 unMount후에 다시 mount되는 과정이라 생각하면 될까요?

2. 이 때(컴포넌트 리렌더링시), 키 값이 변하면 state가 초기화. 그렇지 않으면 변경된 state를 유지하고 있다고 생각하면 될까요?

항상 강의 너무 감사합니다.

이재승님의 프로필 이미지
이재승
지식공유자

1번: 아니요. unmount 는 돔 요소가 삭제되는거라고 생각하시면 됩니다. 리렌더링은 업데이트하는 과정이므로 돔 요소를 삭제하지 않고 기존 것을 재활용합니다

2번: unmount 되면 state 가 초기화 된다고 생각하시면 될 것 같습니다

최연수님의 프로필 이미지
최연수

작성한 질문수

질문하기