React Container Components
Container Components
React 모드에서 내 코드에 가장 깊은 영향을 미치는 모드 중 하나는container component 모드입니다.
React에서.js Conf에서 Jason Bonta는 페이스북에서 고성능 구성 요소 (High Performance Components) 를 어떻게 만드는지 이야기했다.Nestled가 이 강연에서 말한 것은 this gem about container components이다.
이 개념은 매우 간단하다.
하나의container는 데이터 인출을 한 다음 코리스폰딩 서브 구성 요소를 렌더링합니다.그렇습니다.
"Corresponding"은 같은 이름의 구성 요소를 공유하는 것을 의미합니다. 예를 들어 다음과 같습니다.
StockWidgetContainer => StockWidget
TagCloudContainer => TagCloud
PartyPooperListContainer => PartyPooperList
이것이 바로 그중의 개념이다.
Why containers?
예를 들어 평론을 보여주는 구성 요소가 있습니다.컨테이너 구성 요소에 대해 잘 모릅니다.그래서 너는 모든 물건을 한 곳에 놓을 것이다.
// CommentList.js
class CommentList extends React.Component {
constructor(){
super();
this.state = { comments: []}
}
componentDidMount(){
$.ajax({
url: "/my-comments.json",
dataType: 'json',
success: function(comments){
this.setState({comments});
}.bind(this)
});
}
render(){
return <ul> {this.state.comments.map(renderComponent)} </ul>;
}
renderComponent({body, author}){
return <li> {body}-{author} </li>;
}
}
당신의 구성 요소는 데이터를 끌어와서 보여주는 데 사용됩니다.이것은 결코 무슨 잘못이 아니지만, 너는 오히려 약간의 React의 장점을 놓쳤다.
재활용성
CommentList 구성 요소는 동일한 정확한 조건에서만 재사용할 수 있습니다.
데이터 구조
당신이 원하는 구성 요소는 그들이 필요로 하는 데이터 형식에 대한 예상을 정해야 합니다.PropTypes가 바로 이 일을 하고 있습니다.
우리의 구성 요소는 데이터 구조에 대한 요구가 매우 높지만 이러한 요구를 말할 방법이 없다.만약 json의 인터페이스 데이터가 바뀌었다면, 이 구성 요소는 아무런 알림도 하지 않을 것입니다.(사실 말하고 싶은 것은 PropTypes를 잘 활용하여 데이터 구조를 정확하게 제어할 수 없다는 것이다)
한번 더.이번에 컨테이너 추가.
우선, 데이터 인출 기능을container 구성 요소로 옮깁니다.
// CommentListContainer.js
class CommentListContainer extends React.Component{
constructor(){
super();
this.state = { comments: [] }
}
componentDidMount() {
$.ajax({
url: "/my-comments.json",
dataType: 'json',
success: function(comments) {
this.setState({comments: comments});
}.bind(this)
});
}
render() {
return <CommentList comments={this.state.comments} />;
}
}
이제 Comments를 CommentList의 prop으로 다시 만듭니다.
// CommentList.js
class CommentList extends React.Component {
constructor(props) {
super(props);
}
render() {
return <ul> {this.props.comments.map(renderComment)} </ul>;
}
renderComment({body, author}) {
return <li>{body}—{author}</li>;
}
}
마지막으로 우리는 무엇을 얻었습니까?
저희가 실제로 많이 얻었는데...
우리는 우리의 데이터 추출과 과장에 대한 관심사를 나누었다.
CommentList 구성 요소를 재사용할 수 있게 되었습니다.
CommentList가 PropTypes를 사용할 수 있도록 하고 오류가 발생하면 알림을 보낼 수 있습니다.
나는 컨테이너 components의 큰 팬이다.그들은 나의 React game를 많이 진보시켰고, 나의 구성 요소를 더욱 쉽게 읽을 수 있게 했다.그들을 시험해 보고 제이슨의 강연을 보세요.너무 좋아요!
Carry on, nerds.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.