일반적인 사용 사례로 React.Children API 이해하기
{this.props.children}은 불투명한 데이터 구조라고 할 수 있습니다. 이에 대해 수행할 수 있는 작업이나 조작은 매우 제한적입니다. 여기에서 React.Children API가 등장합니다.
React는 이 불투명한 데이터 구조를 처리하는 데 도움이 되는 Children API를 제공합니다.
예를 사용하여 사용 사례를 살펴보겠습니다.
ParentElement.js
import { Component } from "react";
class ParentElement extends Component {
render() {
// Inside the Parent component we are directly displaying the props.children
return <div>{this.props.children}</div>;
}
}
export default ParentElement;
ChildElement.js
import { Component } from "react";
import Parent from "./ParentElement";
// This is a simple example for using the Parent component
// And accessing the child elements wrapped inside the Parent
class ChildElement extends Component {
render() {
return (
<Parent>
<div>Child 1</div>
<div>Child 2</div>
<div>Child 3</div>
<div>Child 4</div>
</Parent>
);
}
}
export default ChildElement;
다음 코드로 출력
이제 발생할 수 있는 시나리오를 살펴보겠습니다.
1. React.Children.toArray()
시나리오 1 - {this.props.children}에서 직계 자식 요소로 4개의 div를 가져오더라도 ParentElement 내부의 첫 번째 자식만 표시해야 합니다.
{this.props.children}에서 얻은 데이터를 불투명 데이터라고 합니다. 이것은 단일 엔터티로 취급되며 배열 형태로 배포할 수 없습니다. 이를 배열로 변환하기 위해 React.Children api에서 toArray 메서드를 사용할 수 있습니다.
이 메서드는 this.props.children을 인수로 받아 배열의 요소를 형성하는 각 직계 자식이 있는 배열로 변환합니다.
이 구현을 살펴보고 시나리오 1에서 언급한 문제를 해결해 보겠습니다.
ParentElement.js
import React, { Component } from "react";
class ParentElement extends Component {
render() {
const { children } = this.props;
// toArray method is called to convert this.props.children to an array
// We are then referencing the first element using index 0
return <div>{React.Children.toArray(children)[0]}</div>;
}
}
export default ParentElement;
toArray 메서드 구현 후 출력
2. React.Children.count()
시나리오 2 - 직속 자식 요소의 수를 가져와야 합니다.
다시 말하지만 이것은 단일 엔터티로 간주되므로 this.props.children에서 계산하는 것이 불가능합니다.
React.Children은 이를 위한 count 메소드를 제공합니다.
이 .props.children을 인수로 취하고 직계 자식 요소의 수를 반환합니다.
ParentElement.js
import React, { Component } from "react";
class ParentElement extends Component {
render() {
const { children } = this.props;
// count method is used to count the immediate child elements in this.props.children
// Even though the count is 4, we are only displaying Child 1
return (
<div>
<p>
Total Count of Children: {React.Children.count(this.props.children)}
</p>
{React.Children.toArray(children)[0]}
</div>
);
}
}
export default ParentElement;
3. React.Children.only()
시나리오 - 3 - this.props.children이 직계 자식으로 1개의 요소만 갖도록 해야 합니다. 이 하나의 요소는 내부에 여러 하위 요소를 가질 수 있습니다. 그러나 가장 높은 수준에서는 요소가 하나만 있는지 확인해야 합니다.
이를 위해 React.Children api의 유일한 방법을 사용할 수 있습니다.
아래 코드를 살펴보겠습니다.
ChildElement.js
import { Component } from "react";
import Parent from "./ParentElement";
// This is a simple example for using the Parent component
// And accessing the child elements wrapped inside the Parent
class ChildElement extends Component {
render() {
return (
// There are 4 immediate child elements here
<Parent>
<div>Child 1</div>
<div>Child 2</div>
<div>Child 3</div>
<div>Child 4</div>
</Parent>
);
}
}
export default ChildElement;
ParentElement.js
import React, { Component } from "react";
class ParentElement extends Component {
render() {
const { children } = this.props;
// count method is used to count the immediate child elements in this.props.children
// Even though the count is 4, we are only displaying Child 1
return (
<div>
<p>
Total Count of Children: {React.Children.count(this.props.children)}
</p>
{/* Making use of the only method */}
{React.Children.only(children)}
</div>
);
}
}
export default ParentElement;
자식 요소가 4개일 때 출력
이제 유일한 방법을 준수하기 위해 단일 div에 4개의 하위 요소를 래핑합니다.
ChildElement.js
import { Component } from "react";
import Parent from "./ParentElement";
// This is a simple example for using the Parent component
// And accessing the child elements wrapped inside the Parent
class ChildElement extends Component {
render() {
return (
// There are 4 immediate child elements here
<Parent>
{/* Wrapping the child elements inside a single element */}
<div>
<div>Child 1</div>
<div>Child 2</div>
<div>Child 3</div>
<div>Child 4</div>
</div>
</Parent>
);
}
}
export default ChildElement;
이제 출력이 -로 변경됩니다.
이제 html 구조를 변경하고 4개의 하위 요소에 상위 div를 추가하여 React.Children.only 메소드를 사용할 때 직계 하위 요소가 하나만 있는지 확인하므로 현재 작동하고 있습니다.
4. React.Children.map()
시나리오 4 - 모든 개별 하위 항목을 반복한 다음 이를 특정 스타일의 버튼 요소로 변환해야 합니다.
이것은 다시 this.props.children을 통해 직접 가능하지 않습니다.
배열 맵 방법과 매우 유사하게 작동하는 React.Children에서 제공하는 맵 방법이 있습니다. 출력으로 항목 배열을 반환합니다.
아래 코드를 살펴보겠습니다.
ChildElement.js
import { Component } from "react";
import Parent from "./ParentElement";
// This is a simple example for using the Parent component
// And accessing the child elements wrapped inside the Parent
class ChildElement extends Component {
render() {
return (
// There are 4 immediate child elements here
<Parent>
{/* Wrapping the child elements inside a single element */}
<div>
<div>Child 1</div>
<div>Child 2</div>
<div>Child 3</div>
<div>Child 4</div>
</div>
</Parent>
);
}
}
export default ChildElement;
ParentElement.js
import React, { Component } from "react";
const btnStyle = {
background: "green",
color: "#fff",
fontSize: "18px",
fontWeight: "bold",
border: "1px solid white",
marginTop: "5px",
padding: "3px",
};
class ParentElement extends Component {
render() {
const { children } = this.props;
// count method is used to count the immediate child elements in this.props.children
// Even though the count is 4, we are only displaying Child 1
return (
<div>
<p>
Total Count of Children: {React.Children.count(this.props.children)}
</p>
{/* Making use of the only method */}
{React.Children.map(children, (child) => {
return <button style={btnStyle}>{child}</button>;
})}
</div>
);
}
}
export default ParentElement;
위 코드의 출력
이제 이 출력을 확인하면 4개의 하위 요소가 모두 단일 버튼 안에 래핑되어 있음을 알 수 있습니다. 이는 ChildElement.js에서 단일 부모 div 아래에 4개의 자식 요소 div를 모두 래핑했기 때문입니다. map 메서드는 직계 자식을 통해서만 반복됩니다.
이제 ChildElement.js의 html 구조를 변경하고 상위 div를 제거하겠습니다.
import { Component } from "react";
import Parent from "./ParentElement";
// This is a simple example for using the Parent component
// And accessing the child elements wrapped inside the Parent
class ChildElement extends Component {
render() {
return (
// There are 4 immediate child elements here
<Parent>
{/* Removed the parent div from here */}
<div>Child 1</div>
<div>Child 2</div>
<div>Child 3</div>
<div>Child 4</div>
</Parent>
);
}
}
export default ChildElement;
위 코드의 출력 -
이미지에서 볼 수 있듯이 이제 스타일이 적용된 4개의 개별 버튼이 표시됩니다.
5. React.Children.forEach()
이 방법은 지도 방법과도 매우 유사합니다. 유일한 차이점은 배열을 반환하지 않는다는 것입니다. 단순히 사용자가 모든 직계 자식 요소를 반복할 수 있도록 합니다.
// This is used to print the values inside the individual child elements
React.Children.forEach(children, (child) => {
console.log(child.props.children);
});
산출
이것이 React의 Children API와 우리가 사용할 수 있는 일반적인 방법 및 사용 사례에 대한 공정한 이해를 제공하는 데 도움이 되었기를 바랍니다.
행복한 코딩!
Reference
이 문제에 관하여(일반적인 사용 사례로 React.Children API 이해하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sajithpradeep/understanding-the-react-children-api-with-common-use-cases-1df4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)