
“React Render에서 Map으로 반환된 배열의 크기 이해하기”
React 컴포넌트의 렌더 메서드에서 array.map 메서드를 사용하고 렌더링되는 행(row)의 수를 알고 싶다면, 몇 가지 방법을 사용할 수 있습니다. 이 블로그 포스트에서는 React에서 map 함수로 반환되는 행 수를 표시하는 다양한 해결책을 살펴보겠습니다.
해결책 1: 멤버 필터링과 개수 세기
행 수를 결정하는 한 가지 방법은 먼저 원하는 행만 필터링한 다음 결과 배열의 길이를 세는 것입니다. 다음은 이러한 방법을 구현한 예입니다:
render() {
const membersToRender = this.state.members.filter(member => member.display);
const numRows = membersToRender.length;
return (
<div>
<p>Number of rows = {numRows}</p>
{
membersToRender.map((member, index) => {
return <p key={index}>{ member.name }</p>
})
}
</div>
);
}
이 해결책에서는 먼저 display 조건에 기반하여 members 배열을 필터링합니다. 그런 다음 필터링된 배열을 membersToRender 변수에 할당합니다. 이 필터링된 배열의 길이를 가져와 행 수를 결정할 수 있습니다. 마지막으로 membersToRender 배열을 매핑(map)하고 원하는 요소를 렌더링합니다.
해결책 2: 컴포넌트로 추출하기
또 다른 접근 방식은 로직을 별도의 컴포넌트로 추출하는 것입니다. 다음은 예시입니다:
class App extends React.Component {
constructor() {
super();
this.state = {
members: [
// ...
],
};
}
visibleMembers() {
return this.state.members.filter(m => m.display);
}
render() {
const members = this.visibleMembers();
return (
<div>
<p>Number of rows = {members.length}</p>
{members.map(m => <p key={m.id}>{m.name}</p>)}
</div>
);
}
}
이해결책에서는 display 조건에 기반하여 members 배열을 필터링하는 visibleMembers 메서드를 정의합니다. 그런 다음 이 메서드를 render 함수 내에서 호출하여 필터링된 배열을 얻습니다. 이 배열의 length 속성을 사용하여 map 함수로 반환되는 행 수를 표시할 수 있습니다.
해결책 3: 필터와 맵을 사용한 간소화
더 간결한 해결책을 선호한다면, 필터와 맵 연산을 직접 렌더 메서드에서 결합할 수 있습니다:
render() {
const members = this.state.members.filter(member => member.display);
return (
<div>
<p>Number of rows = {members.length}</p>
{members.map(member => <p>{member.name}</p>)}
</div>
);
}
이 접근 방식에서는 중간 변수가 필요 없도록 members 배열에 직접 필터 메서드를 적용합니다. 그런 다음 필터된 배열의 길이를 표시하고 원하는 행을 렌더링하기 위해 이 배열을 매핑합니다.
결론
이 블로그 포스트에서는 React 컴포넌트의 렌더 메서드에서 map 함수로 반환되는 배열의 크기를 결정하는 다양한 해결책을 살펴보았습니다. 배열을 필터링하고 길이를 측정하거나 별도의 컴포넌트를 활용함으로써 map 함수로 렌더링되는 행 수를 효과적으로 표시할 수 있습니다. 이를 위해 필요에 맞는 접근 방식을 선택하고 React 코드를 최적화하세요.
참고 자료 :
https://stackoverflow.com/questions/45969531/get-size-of-array-returned-by-map-in-react-render
같은 카테고리의 다른 글 보기 :