React - Props - 03
Communicating with Props
Important Concepts
Component Nesting: 컴포넌트 안에 다른 컴포넌트를 중첩 가능
Component Resuability: 재사용 가능
Component Configuration: 컴포넌트를 만들 때 구성 가능
Add Style
/public/index.html 부분에 추가한다.
< head>
...
< link rel = " stylesheet" href = " https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css" />
</ head>
하나의 comments container 만들기
import React from 'react' ;
import ReactDOM from 'react-dom' ;
import faker from 'faker' ;
const App = ( ) => {
return (
< div className= "ui container comments" >
< div className= "comment" >
< a href= "/" className= "avatar" >
< img alt= "avatar" src= { faker. image. avatar ( ) } / >
< / a>
< div className= "content" >
< a href= "/" className= "author" >
Sam
< / a>
< div className= "metadata" >
< span className= "date" > Today at 6 : 00PM< / span>
< / div>
< div className= "text" > Nice blog post! < / div>
< / div>
< / div>
< / div>
)
} ;
ReactDOM. render ( < App / > , document. querySelector ( '#root' ) )
faker library를 사용하여 아래와 같이 만들 수 있다.
중복되는 html elements를 CommentDetail.js로 빼기
import React from 'react' ;
import ReactDOM from 'react-dom' ;
import CommentDetail from './CommentDetail' ;
const App = ( ) => {
return (
< div className= "ui container comments" >
< CommentDetail / >
< / div>
)
} ;
import React from 'react' ;
import faker from 'faker' ;
const CommentDetail = ( ) => {
return (
< div className= "comment" >
< a href= "/" className= "avatar" >
< img alt= "avatar" src= { faker. image. avatar ( ) } / >
< / a>
< div className= "content" >
< a href= "/" className= "author" >
Sam
< / a>
< div className= "metadata" >
< span className= "date" > Today at 6 : 00PM< / span>
< / div>
< div className= "text" > Nice blog post! < / div>
< / div>
< / div>
) ;
} ;
export default CommentDetail;
위와 같이 작성하면 전과 같은 결과가 출력된다.
props를 이용하여 데이터 넘겨주기
props
Passing data from a parent component to a child component
Goal is to customise or configure a child component
< CommentDetail author= "Sam" / >
< CommentDetail author= "Alex" / >
< CommentDetail author= "Jane" / >
const CommentDetail = ( props) => {
return (
< div className= "comment" >
< a href= "/" className= "avatar" >
< img alt= "avatar" src= { faker. image. avatar ( ) } / >
< / a>
< div className= "content" >
< a href= "/" className= "author" >
{ props. author}
< / a>
< div className= "metadata" >
< span className= "date" > Today at 6 : 00PM< / span>
< / div>
< div className= "text" > Nice blog post! < / div>
< / div>
< / div>
) ;
} ;
multiple props 이용하기
< CommentDetail
author= "Sam"
timeAgo= "Today at 4:45PM"
content= "Nice blog post"
avatar= { faker. image. avatar ( ) }
/ >
return (
< div className= "comment" >
< a href= "/" className= "avatar" >
< img alt= "avatar" src= { props. avatar} / >
< / a>
< div className= "content" >
< a href= "/" className= "author" >
{ props. author}
< / a>
< div className= "metadata" >
< span className= "date" > { props. timeAgo} < / span>
< / div>
< div className= "text" > { props. content} < / div>
< / div>
< / div>
) ;
아래의 이미지처럼 comments list가 출력된다.
Approval Card 추가하기
< ApprovalCard>
< CommentDetail
author= "Sam"
timeAgo= "Today at 4:45PM"
content= "Nice blog post"
avatar= { faker. image. avatar ( ) }
/ >
< / ApprovalCard>
import React from 'react' ;
const ApprovalCard = props => {
console. log ( props. children) ;
return (
< div className= "ui card" >
< div className= "content" > { props. children} < / div>
< div className= "extra content" >
< div className= "ui two buttons" >
< div className= "ui basic green button" > Approve< / div>
< div className= "ui basic red button" > Reject< / div>
< / div>
< / div>
< / div>
) ;
} ;
export default ApprovalCard;
여기까지의 출력 화면입니다.
Warning message 추가하기// index.js
< ApprovalCard> // ApprovalCard안에 html element가 존재하면 props처럼 전달된다.
< div>
< h4> Warning!</ h4>
Are you sure you want to do this?
</ div>
</ ApprovalCard>
여기까지의 출력 화면입니다.
GitHub and Others
댓글
댓글 쓰기