← 문제 목록
고급 React 100P

useMemo 참조 동등성 함정

필터가 변경되지 않아도 ExpensiveList가 매번 리렌더링됩니다. 버그를 찾으세요:
JSX
function Dashboard() {
  const [count, setCount] = useState(0);
  const [filter, setFilter] = useState('all');

  const filteredItems = useMemo(() => {
    return items.filter(item => {
      if (filter === 'all') return true;
      return item.category === filter;
    });
  }, [filter]);

  const handlers = {
    onSelect: (id) => console.log(id),
    onDelete: (id) => console.log('delete', id),
  };

  return (
    <div>
      <button onClick={() => setCount(c => c + 1)}>Count: {count}</button>
      <ExpensiveList items={filteredItems} handlers={handlers} />
    </div>
  );
}

const ExpensiveList = React.memo(({ items, handlers }) => {
  console.log('ExpensiveList 렌더링');
  return <ul>{items.map(i => <li key={i.id}>{i.name}</li>)}</ul>;
});

답변

로그인 후 제출하기
0명 풀이 · 정답률 0%