: React Component의 입력 = Props
: React Component의 출력 = React element
=> 어떤 속성들을 입력 받아서 그에 맞는 React element(가장 작은 블럭 조각들)를 생성하여 반환해주는 것
<javaScript 함수의 속성>
function sum(a, b){
return a+b;
} //입력값 (input)을 변경하지 않으며, 같은 입력값에 대해서는 항상 같은 출력값(output)을 리턴 => "Pure"하다
fuction withdraw(account, amount){
account.total-=ammout;
} //입력값(input) account를 변경 => "Impure"하다
컴포넌트의 특징
(공식적) All React components must act like pure functions with respect to their props.
= 모든 리액트 컴포넌트는 그들의 Props에 관해서는 pure함수 같은 역할을 해야한다.
= 모든 리액트 컴포넌트는 Props를 직접 바꿀 수 없고, 같은 Props에 대해서는 항상 같은 결과를 보여줄 것!
- jsx를 사용하는 경우 (key-value)쌍의 형태
: App 컴포넌트가 나오고 그 안에 Profile 컴포넌트가 존재
: 중괄호를 사용하면 무조건 자바스크립트가 들어감.
-> Props는 이와 같은 자바스크립트 객체가 됨.
Props의 중괄호를 사용해서 다음과 같이 Props의 값으로 컴포넌트도 넣을 수 있음
: 레이아웃 컴포넌트 Props로는 정수 값을 가진 width, height과 리액트 element로 Header, Footer가 들어오게 된다.
function Welcome(props){
return <h1>안녕, {props.name}</h1>; //리액트 element를 반환 => 리액트 컴포넌트라고 할 수 있음
class Welcome extends React.Component{ //함수 컴포넌트의 큰 차이점은 React.Component를 상속받아서 작성한다는 점.
render(){
return <h1>안녕, {this.props.name}</h1>;
}
}
-> 항상 대문자로 시작해야 한다.
: DOM 태그 사용 (위)
: Component 사용 (아래)
: 여러 개의 Component를 합쳐서 하나의 Component를 만드는 것
: 리액트에서는 Component 안에 또 다른 Component를 쓸 수 있다.=> 복잡한 화면을 여러 개의 Component로 나눠서 구현 가능!
Props의 값을 다르게 해서 Welcome 컴포넌트를 여러번 사용함.
App이라는 컴포넌트는 3개의 다른 Welcome 컴포넌트를 담고있는 컴포넌트이다.
: 복잡한 Component를 쪼개서 여러개의 Component로 나눌 수도 있음
큰 컴포넌트를 산산조각내서 일부의 컴포넌트를 사용하겠다는 것 => 재사용성이 높아짐 = 개발 속도 향상
1. Avatar 추출하기
img 태그를 사용하여 사용자의 프로필 이미지를 표시하고 있음. 이를 추출하여 Avatar 컴포넌트로 만들기.
: 기존에 사용하던 author 대신 좀 더 보편적인 의미를 가진 user로 바꿔 사용. => 재사용 측면 고려
-> 추출된 Avatar 컴포넌트를 Comment 컴포넌트에 반영.
2. UserInfo 추출하기
해당 칸이 사용자 정보를 담고있는 부분. 이를 추출하기!
-> 추출한 UserInfo 컴포넌트를 Comment 컴포넌트에 반영.
코드가 처음에 비해서 훨씬 단순해짐!!!
참고자료 Soaple