toDo = ['a', 'b', 'c', 'd', 'e', 'f'],
function DraggableCard({ toDo, index }: DraggableCardProps) {
console.log(toDo, 'has re');
return (
<Draggable draggableId={toDo} index={index}>
{(provided) => (
<Card ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>
{toDo}
</Card>
)}
</Draggable>
);
}
export default React.memo(DraggableCard);
'a' 'b' 만 위치가 변경되었다면, 'c' ~ 'f' 까지는 렌더링이 불필요하다. 따라서 memo 를 사용하여 재사용한다.
컴포넌트가 동일한 props로 동일한 결과를 렌더링해낸다면, React.memo를 호출하고 결과를 메모이징(Memoizing)하도록 래핑하여 경우에 따라 성능 향상을 누릴 수 있습니다. 즉, React는 컴포넌트를 렌더링하지 않고 마지막으로 렌더링된 결과를 재사용합니다.
React.memo는 props 변화에만 영향을 줍니다. React.memo로 감싸진 함수 컴포넌트 구현에 useState, useReducer 또는 useContext 훅을 사용한다면, 여전히 state나 context가 변할 때 다시 렌더링됩니다.
이 메서드는 오직 성능 최적화를 위하여 사용됩니다. 렌더링을 “방지”하기 위하여 사용하지 마세요. 버그를 만들 수 있습니다.