React Component들이 서로 연결되고 반응하기 위해서는 하나의 component 값들을 다른 component로 보내주어야 한다. 하나의 컴포넌트에서 다른 컴포넌트로 넘겨주는 값, 정보(information)를 "props"라고 한다.
props
를 쓴다..(dot)
으로 속성명에 접근가능하고, props.속성명
으로 속성 값을 가지고 올 수 있다. this.props
<MyComponent foo = "bar" />
<Example MyInfo = {["top", "secret"]} />
<Greeting name="Frarthur" town="Flundon" age={2} haunted={false} />
return
에 this.props.name-of-information
를 포함시킨다.import React from 'react';
import ReactDOM from 'react-dom';
class Greeting extends React.Component {
render() {
return <h1>Hi there, {this.props.firstName}</h1>;
}
}
ReactDOM.render(
<Greeting firstName='Kayyoung' />,
document.getElementById('app')
);
<Greeting />
컴포넌트를 <App />
컴포넌트에서 렌더링한다고 가정해보자.
1. 컴포넌트
import React from 'react';
//import ReactDOM from 'react-dom';
export class Greeting extends React.Component {
render() {
return <h1>Hi there, {this.props.name}!</h1>;
}
}
// ReactDOM.render(<App />, document.getElementById('app'));
import ReactDOM
, ReactDOM.render
문구는 쓰지 않는다. => 실행 페이지에서만 해준다.export
해준다.import React from 'react';
import ReactDOM from 'react-dom';
import {Greeting} from './Greeting'; //컴포넌트 받아오기
class App extends React.Component {
render() {
return (
<div>
<h1>
Hullo and, "Welcome to The Newzz," "On Line!"
</h1>
<Greeting name="kayoung"/>
<article>
Latest newzz: where is my phone?
</article>
</div>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
props
는 들어온 정보값(passed-in information)을 저장하고 있는 객체의 이름이며,
this.props
는 그 객체 저장소를 뜻한다. 동시에 저장된 정보의 각각을 prop
이라고 한다.
즉, props
는 두개 이상의 정보값을 담고 있거나, 정보값들을 담고 있는 객체를 뜻할 수 있다.
<h1 style ={{color: this.props.titleColor}}>Child Component</h1>
// this : 해당 컴포넌트
// this.props : 해당 컴포넌트 props 객체
// this.props.titleColor : props 객체의 특정 key(titleColor)값.
함수 또한 props로 쓸 수 있는데, 자주 사용하는 경우가 바로 event handler 함수를 사용할 때다.
React에서 이벤트 핸들러 메서드는 render 메서드와 같이 컴포넌트 클래스에서 메서드로 작동한다.
import React from 'react';
import ReactDOM from 'react-dom';
import { Button } from './Button';
class Talker extends React.Component {
handleClick() {
let speech = '';
for (let i = 0; i < 10000; i++) {
speech += 'blah ';
}
alert(speech);
}
render() {
return <Button onClick={this.handleClick} />;
}
}
ReactDOM.render(
<Talker />,
document.getElementById('app')
);
render()
에 실행할 컴포넌트의 이벤트 속성, prop name을 준다.return <Button onClick={this.handleClick} />;
handle
붙여준다.on
+ 이벤트 타입// Talker.js (부모 컴포넌트)
// The attribute name onClick
// is just a normal attribute name:
<Button onClick={this.handleClick} />
// Button.js (자식 컴포넌트)
// The attribute name onClick
// creates an event listner:
<button onClick={this.props.onClick}>
Click me!
</button>
컴포넌트 요소에 기본값을 설정하고 싶을 때 defaultProps
프로퍼티를 쓴다.
class Example extends React.Component {
render() {
return <h1>{this.props.text}</h1>;
}
}
Example.defaultProps = {text: 'yo'};
defaultProps
프로퍼티는 객체로 셋팅하고자 하는 props를 넣는다.