// class형 컴포넌트
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
// 함수형 컴포넌트
import React, { useState } from 'react';
function App() {
const [state, setState] = useState(0);
}
// class형
<p>You clicked {this.state.count} times</p>
// 함수형
<p>You clicked {count} times</p>
// class형
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
// 함수형
import React, { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
return (
<div>
// count 변수의 값을 업데이트하려며 setCount 함수를 호출하면 된다
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
1) useState를 react에서 가져온다.
2) useState를 이용하면 state변수와 해당 state를 업데이트 할 수 있는 함수가 쌍으로 반환된다.
3) 사용자가 버튼을 클릭하면 onClick이벤트가 실행되면서 setCount 함수를 호출하여 state 변수의 값을 갱신한다. react는 count라는 변수를 App 컴포넌트에 넘기며 해당 컴포넌트를 리렌더링 한다
클래스형은 상태값을 업데이트하기 위해 this를 호출하지만 함수형 컴포넌트는 변수와 변수를 갱신하는 함수를 동시에 가지고 있으므로 this를 호출하지 않아도 된다. hook의 등장으로 class형 컴포넌트를 혼합하여 사용하지 않고도 상태를 변경할 수 있게 되었다.
App이라는 부모컴포넌트에서 Example이라는 컴포넌트를 사용할 때 greeting이라는 값을 전달
// App(부모)
import React, { useState } from 'react';
import Example from '../pages/Example/Example';
function App() {
return (
<div>
<Example greeting="Hello" />
</div>
);
};
// Example(자식)
import React from 'react';
function Example(props) {
return (
<div>
<div>{props.greeting}</div>
</div>
);
};
App이라는 부모컴포넌트에서 Example이라는 컴포넌트를 사용할 때 색상을 전달
// App(부모)
import React, { useState } from 'react';
import Example from '../pages/Example/Example';
function App() {
const [color, setColor] = useState('tomato');
return (
<div>
<Example greetingColor={color} />
</div>
);
};
// Example(자식)
import React from 'react';
function Example(props) {
return (
<div>
<h1 style{{color: props.greetingColor}}>Hello !</h1>
</div>
);
};
import React, { useState } from 'react';
import Example from '../pages/Example/Example';
function Example() {
return (
<div>
<h1>{greeting}</h1>
</div>
);
};
Example.defaultProps = {
greeting: "good-bye"
}
// Hello
import React from 'react';
function Hello() {
return (
<div>
</div>
)
}
// App
import React from 'react';
import Example from './Example';
import Hello from './Hello';
function App() {
return (
<Hello>
<Example />
<Example />
</Hello>
);
}
위 예시에서는 Hello 사이에 있는 Example이 보이지 않는다. 내용을 보이게 하려면 props.children 을 렌더링해줘야 된다.
import React from 'react';
function Hello({ children }) {
return (
<div>
{children}
</div>
)
}
good-bye라는 문구가 출력된다
참고 자료🙇🏻♀️:
React 공식 문서
벨로펀트와 함께하는 모던 리액트