React + Material-UI 문제해결

React + Material-UI: “Each child in a list should have a unique ‘key’ prop” 오류 해결 React와 Material-UI를 함께 사용하다가 렌더링 중 “Each child in a list should have a unique ‘key’ prop” 경고 메시지를 …

title_thumbnail(React + Material-UI 문제해결)

React + Material-UI: “Each child in a list should have a unique ‘key’ prop” 오류 해결

React와 Material-UI를 함께 사용하다가 렌더링 중 “Each child in a list should have a unique ‘key’ prop” 경고 메시지를 만나면 걱정하지 마세요. 이는 흔한 문제이며 쉽게 해결할 수 있습니다. 이 경고는 일반적으로 고유한 키 프로퍼티를 제공하지 않고 컴포넌트 목록을 렌더링 할 때 발생합니다.

경고 메시지는 다음과 같이 표시됩니다:

Warning: Each child in a list should have a unique "key" prop.
Check the render method of `App`. See .. for more information.
    in ListItemCustom (at App.js:137)
    in App (created by WithStyles(App))
    in WithStyles(App) (at src/index.js:7)

이 문제를 해결하려면 목록 안의 각 컴포넌트에 고유한 “key” 프로퍼티를 추가해야 합니다. 이 경우 Material-UI의 ListItem 컴포넌트가 경고를 일으키고 있습니다.

App 컴포넌트의 render 메서드 내부에서 이벤트를 매핑하고 ListItem 컴포넌트를 렌더링하는 루프 부분을 찾으십시오. 경고를 없애기 위해 각 ListItem 컴포넌트에 고유한 키를 할당하는 것이 중요합니다. 다음은 예시입니다:

<code class="language-javascript">// 업데이트된 render 메서드
render() {
  let eventsList;
  if (this.state.buyOrRelease === "buy") {
    // 구매 로직 처리
  } else {
    eventsList = this.state.pages.map(page => (
      <div key={page.id}>
        <ListSubheader className={this.props.classes.listSubHeaderRoot}>{page.name}</ListSubheader>
        {page.events.map(event => (
          <ListItemCustom key={event.id} value={event} onHeaderClick={this.handleSort} />
        ))}
      </div>
    ));
  }
  // 나머지 코드
}

이 예시에서는 이벤트의 id 프로퍼티를 사용하여 고유한 키를 설정합니다. 각 아이템을 고유하게 식별하는 id나 다른 고유한 속성을 키로 사용하는 것이 중요합니다.

목록 내의 각 자식 컴포넌트에 고유한 키를 제공함으로써 React는 변경된 항목, 추가된 항목, 제거된 항목을 식별할 수 있습니다. 이는 성능을 향상시키고 동적 목록을 올바르게 렌더링하는 데 도움이 됩니다.

기억해야 할 점은 루프의 인덱스(예: {/* <ListItem key={index} ... */})를 키로 사용하는 것은 일반적으로 권장되지 않습니다. 항목을 추가, 제거 또는 재정렬할 때 예상치 못한 동작을 야기할 수 있습니다.

이 간단한 조정을 따라하면 누락된 키 프로퍼티에 대한 경고 메시지를 더 이상 표시하지 않을 수 있으며, React 컴포넌트를 Material-UI에서 원활하게 렌더링할 수 있습니다.

즐겁게 코딩하세요!

참고 자료 : 

reactjs

Leave a Comment