HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🚀
개발 노트
/
⛳
리액트 탐구하기
⛳

리액트 탐구하기

 

key는 왜 필요할까?

React는 key를 통해 기존 트리와 이후 트리의 자식들이 일치하는지 확인한다.
개발자는 key를 통해, 여러 렌더링 사이에서
어떤 자식 엘리먼트가 변경되지 말아야 할지 표시해 줄 수 있다.
<ul> <li key="2015">Duke</li> <li key="2016">Villanova</li> </ul> <ul> <li key="2014">Connecticut</li> <li key="2015">Duke</li> <li key="2016">Villanova</li> </ul>
 
배열의 인덱스를 key로 사용할 수 있으나, 권장하지 않는다.
배열의 항목들이 재배열되지 않는다면 괜찮지만,
재배열되는 경우 state와 관련된 문제가 발생할 수 있다.
인덱스를 key로 사용하면, 항목의 순서가 바뀌었을 때 key 또한 바뀌어 버린다.
그 결과로 컴포넌트의 state가 엉망이 되거나 의도하지 않은 방식으로 바뀔 수 있다.
 
 

state를 직접 수정하지마!

리액트에서는 상태를 직접적으로 수정해서는 안 된다.
이미 만들어진 오브젝트는 항상 불변성(Immutability)을 유지하는 것이 좋다.
 
// Bad <button onClick={() => { this.state.count++; this.setState(this.state); }} > Click </button> // Good <button onClick={() => { this.setState(state => ({ count: state.count + 1, })); }} > Click </button>
 

1. setState는 비동기적으로 동작한다.

상태를 직접 수정하면서 업데이트할 경우,
이전 업데이트 내용이 다음 업데이트 내용으로 덮어 쓰여질 위험이 있다.
비동기 특성으로 인해 예상하지 못한 버그가 발생할 위험이 존재한다.
 

2. PureComponent에서 정상 동작하지 않는다.

PureComponent는 props와 state를 얕은 비교를 통해 비교한 뒤,
변경된 것이 있을 때는 리렌더링하고, 변경된 것이 없다면 리렌더링하지 않는다.
 
상태를 직접 변경할 경우, 동일한 오브젝트가 전달되므로 레퍼런스가 동일하다.
PureComponent는 상태가 동일하다고 판단하고 리렌더링을 하지 않는다.
 
 

참고 자료

재조정 (Reconciliation) - React
React는 선언적 API를 제공하기 때문에 갱신이 될 때마다 매번 무엇이 바뀌었는지를 걱정할 필요가 없습니다. 이는 애플리케이션 작성을 무척 쉽게 만들어주지만, React 내부에서 어떤 일이 일어나고 있는지는 명확히 눈에 보이지 않습니다. 이 글에서는 우리가 React의 "비교 (diffing)" 알고리즘을 만들 때 어떤 선택을 했는지를 소개합니다.
재조정 (Reconciliation) - React
https://ko.reactjs.org/docs/reconciliation.html
재조정 (Reconciliation) - React
React.Component - React
이 문서에서는 React 컴포넌트 class를 다루는 API들을 자세히 소개합니다. 이 문서는 컴포넌트와 props, state와 생명주기 등과 같은 기초적인 React의 개념들에 익숙하다고 가정하고 있습니다. 그렇지 않다면, 먼저 읽으시길 바랍니다. React를 사용할 때는 컴포넌트를 class 또는 함수로 정의할 수 있습니다. class로 정의된 컴포넌트는 아래에 자세히 설명하고 있듯 보다 많은 기능을 제공합니다.
React.Component - React
https://ko.reactjs.org/docs/react-component.html
React.Component - React
[React] Pure Component란?
React.PureComponent는 사실 React.Component와 비교해서 딱 한가지만 다르다 react의 생명주기 메서드중 하나인shouldComponentUpdate 를 어떻게 쓰는가 하는 부분이다. shouldComponentUpdate() shouldComponentUpdate()는 props 또는 state가 새로운 값으로 갱신되어서 렌더링이 발생하기 직전에 호출된다. 기본적으로 shouldComponentUpdate() 메서드의 return값은 true 인데 false를 반환할 경우 render()와 componentDidUpdate()는 호출되지 않는다. React.Component는 shouldComponentUpdate를 따로 설정해주지 않은 경우, 항상 true를 반환한다.
[React] Pure Component란?
https://velog.io/@dolarge/Pure-Component%EB%9E%80
[React] Pure Component란?