[React-복습] 3. Components와 Props
Components와 Props에 대한 스케치 포스팅이다.
01. Components와 Props
개념적으로 컴포넌트는 JavaScript 함수와 유사하다. “props”라고 하는 임의의 입력을 받은 후, 화면에 어떻게 표시되는지를 기술하는 React 엘리먼트를 반환합니다.
01-1. 함수 컴포넌트와 클래스 컴포넌트
JavaScript 함수를 작성 방법
이러한 컴포넌트는 JavaScript 함수이기 때문에 말 그대로 “함수 컴포넌트”라고 호칭합니다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
ES6문법 Class를 사용하여 컴포넌트 정의 방법
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
01-2. 컴포넌트 렌더링
React가 사용자 정의 컴포넌트로 작성한 엘리먼트를 발견하면 JSX 어트리뷰트와 자식을 해당 컴포넌트에 단일 객체로 전달합니다. 이 객체를 “props”(html 태그 속성값들의 객체)라고 한다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
const root = ReactDOM.createRoot(document.getElementById('root'));
const element = <Welcome name="Sara" />;
root.render(element);
01-3. 컴포넌트 추출
- 컴포넌트 추출
- 컴포넌트 추출이란? 컴포넌트를 여러 개의 작은 컴포넌트로 나누는 것을 말한다.
컴포넌트 추출 예제
/**
* Dept 추출
* @param {*} props
* @returns
*/
function Dept(props) {
return (
<div>부서 : {props.user.deptName}</div>
<div>직책 : {props.user.position}</div>
);
}
/**
* UserInfo 추출
* @param {*} props
* @returns
*/
function UserInfo(props) {
return (
<div>
<Dept user={props.user} />
<div>{props.user.name}</div>
</div>
);
}
/**
* Avatar와 UserInfo 가 추출 된 Comment
* @param {*} props
* @returns
*/
function Comment(props) {
return (
<div>
<UserInfo user={props.author} />
<div>{props.text}</div>
<div>{props.date}</div>
</div>
);
}
01-4. Props는 읽기 전용
- props는 읽기 전용
- 함수 컴포넌트나 클래스 컴포넌트 모두 컴포넌트의
자체 props를 수정
하면 안된다. 컴포넌트에 전달되는 단일 객체
이다.
순수 함수
이런 함수들을 순수 함수라고 칭함, 입력값을 바꾸려 하지 않고 항상 동일한 입력값에 대해 동일한 결과를 반환하기 때문에
function sum(a, b) {
return a + b;
}
순수 함수가 아닌 함수
반면에 다음 함수는 자신의 입력값을 변경하기 때문에 순수 함수가 아니다.
function withdraw(account, amount) {
account.total -= amount;
}
모든 React 컴포넌트는 자신의 props를 다룰 때 반드시 순수 함수처럼 동작
해야 합니다.(규칙)
물론 애플리케이션 UI는 동적이며 시간에 따라 변합니다. React 에서는 이러한 문제를 위해서 "state"
이 있다.
React 컴포넌트는 state를 통해 위 규칙을 위반하지 않고 사용자 액션, 네트워크 응답 및 다른 요소에 대한 응답으로 시간에 따라 자신의 출력값을 변경할 수 있습니다.
[참고]