React Basic - hochan222/Everything-in-JavaScript GitHub Wiki
React๋ SPA (Single Page Application) ์ฆ, ๋จ์ผ ํ์ด์ง ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑ๋๋ฐ ์ฌ์ฉ๋๋ ์คํ ์์ค ํ๋ก ํธ์๋ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๋๋ค.
์น ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ Layer ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฆฌ์กํธ๋ ํ์ด์ค๋ถ์ ์ํํธ์จ์ด ์์ง๋์ด Jordan Walke ์ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
๋ฆฌ์กํธ๋ 2011 ๋
ํ์ด์ค๋ถ ๋ด์คํผ๋์ ๋ฐํ๋์๊ณ , 2012๋
์ธ์คํ๊ทธ๋จ์ ์ฒ์ ๊ตฌ์ถ๋์์ต๋๋ค.
React ์ ์ฃผ์ ํน์ง์ ์๋์ ๊ฐ์ต๋๋ค.
- RealDOM ์ ์กฐ์ํ๋๋ฐ ๋ง์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ค๋ ์ ์ ๊ณ ๋ คํ์ฌ ๋ฆฌ์กํธ๋ RealDOM ๋์ VirtualDOM์ ์ฌ์ฉํฉ๋๋ค.
- Virtual DOM์ด๋ผ๋ ๊ฑธ ๋์ ํ์ฌ DOM์ ์ง์ ๊ณ์ฐํ์ง ์๊ณ ๋ด๋ถ์ ์ผ๋ก ๋น ๋ฅด๊ฒ diff๋ฅผ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ค์๋ค. ์ฒ์์๋ O(n3) ์ด์์ผ๋ ๊ฒฐ๊ตญ O(n)์ผ๋ก ๋ง๋ค์๋ค.
-
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ง์ํฉ๋๋ค.
- React๋ ์ฒ์๋ถํฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ๊ณ ๋ คํ์ฌ ์ค๊ณํ๋ค.
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ๋๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ฐ๋ฆ
๋๋ค.
- props, useState
- UI ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
JSX ๋ JS XML (ECMAScript๋ก XML ์ ์ฌ ๊ตฌ๋ฌธ ํ์ฅ) ์ ๊ตฌ๋ฌธ ํ๊ธฐ๋ฒ์
๋๋ค. JSX ๋ JS XML์ ์ฝ์์
๋๋ค.
HTML๊ณผ ๊ฐ์ ๋ฌธ๋ฒ๊ณผ ํจ๊ป JS๋ฅผ ํํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ์๋์ h1 ํ๊ทธ์์ text ๋ render ํจ์์ ์ํด JS ํจ์๋ก ๋ฐํ๋ฉ๋๋ค.
render() {
return (
<div>
<h1> Welcome to React world!!</h1>
</div>
);
}
element๋ DOM ๋ ธ๋ ๋๋ ๋ค๋ฅธ component๋ค๊ณผ ๊ด๋ จํ์ฌ ํ๋ฉด์ ํ์ ํ ๋ด์ฉ์ ํํํ๋ ์ผ๋ฐ ๊ฐ์ฒด์ ๋๋ค. elements๋ ๋ค๋ฅธ elements ๋ค์ ํฌํจํ ์ ์์ต๋๋ค. React element๋ฅผ ๋ง๋๋ ๋น์ฉ์ ์ ๋ ดํฉ๋๋ค. element ๋ ์์ฑ๋๋ฉด ๋ณํ๋์ง ์์ต๋๋ค. ๋ฆฌ์กํธ element ์ ํํ์ ์๋์ ๊ฐ์ต๋๋ค.
const element = React.createElement("div", { id: "login-btn" }, "Login");
์์์ ๋ง๋ค์ด์ง element ๋ ์๋์ ๊ฐ์ ๊ฐ์ฒด๋ก ๋ฆฌํด๋ฉ๋๋ค.
{
type: 'div',
props: {
children: 'Login',
id: 'login-btn'
}
}
๋ง์ง๋ง์ผ๋ก ์๋์ ๊ฐ์ด ReactDOM.render ๋ฅผ ์ด์ฉํ์ฌ DOM ์ผ๋ก ๋ ๋๋งํฉ๋๋ค.
<div id="login-btn">Login</div>
๋ฐ๋ฉด component ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ธ๋ ์ ์์ต๋๋ค. render ๋ฉ์๋๊ฐ ์๋ class ์ผ ์๋ ์์ต๋๋ค. ๊ฐ๋จํ component ์ผ ๊ฒฝ์ฐ function์ผ๋ก ์ ์ ๋ ์ ์์ต๋๋ค. ์ ๋ ฅ๋ component ๋ฅผ ๋ฐํ์ผ๋ก element ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. ๋ง์ง๋ง์ JSX ๋ createElement๋ก ๋ณํ๋ฉ๋๋ค.
function Button({ onLogin }) {
return React.createElement(
"div",
{ id: "login-btn", onClick: onLogin },
"Login"
);
}
ReactJS ๋ Components ์์ฑํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
Functional components
ReactJS ์์ component๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค. props ๋ฅผ ๋ฐ์ ์ ์๊ณ React elements ๋ฅผ ๋ฆฌํดํ ์ ์์ต๋๋ค. ์ด๋ฐ ๋ฐฉ๋ฒ์ pure ํ JS์ function ์ด๊ธฐ ๋๋ฌธ์ functionalํ ์์ฑ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
function Greeting(props) {
return <h1> Hello, {props.message}</h1>;
}
Class components
ES6 Class๋ฅผ ์ฌ์ฉํ์ฌ component ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์์์ ๋ณธ functional ์ ์ธ๋ฒ์ ์๋์ ๊ฐ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.message}</h1>;
}
}
Component ์์ state ๋๋ life cycle methods ๋ฅผ ํ์๋ก ํ๋ค๋ฉด Class component๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด Functional component๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PureComponent๋ ๋์ผํ ์ํ์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. shouldComponentUpdate ๋ฉ์๋๋ฅผ ๋ค๋ฃฐ ์ ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ component์ ๋์ผํฉ๋๋ค.
props ๋๋ state ๊ฐ ๋ณ๊ฒฝ๋ ๋ PureComponent ๋ state ์ props ์ ๋ํด Shallow Compare์ ์ํํฉ๋๋ค.
๋ฐ๋ฉด component๋ ํ์ฌ props์ ๋ณํ๋ state๋ฅผ ๋น๊ตํ์ง ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ component๋ shouldComponentUpdate๊ฐ ํธ์ถ ๋ ๋ ๋ง๋ค ๋ค์ render ๋ฉ๋๋ค. (shouldComponentUpdate์ ๊ธฐ๋ณธ๊ฐ์ true ์ด๊ธฐ ๋๋ฌธ์)
Component State ๋ component์ life cycle ๋์ ๋ณ๊ฒฝ๋ ์ ์๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด์ ๋๋ค. ์ฐ๋ฆฌ๋ state๋ฅผ ๊ฐ๋ฅํ ๋จ์ํ๊ฒ ๋ง๋ค๊ณ state ์ ๊ตฌ์ฑ ์์์ ์๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค.
message state๋ฅผ ๊ฐ์ง user component ๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
class User extends React.Component {
constructor(props) {
super(props);
this.state = {
message: "Welcome to React world"
};
}
render() {
return (
<div>
<h1>{this.state.message}</h1>
</div>
);
}
}
Props ๋ HTML ํ๊ทธ ์์ฑ๊ณผ ์ ์ฌํ ๊ท์น์ ์ฌ์ฉํ์ฌ React component ์ ์ ๋ฌ๋๋ ๊ฐ์ ํฌํจํ๋ ๋จ์ผ ๊ฐ ๋๋ ๊ฐ์ฒด์ ๋๋ค. ๋ถ๋ชจ component ์์ ์์ component ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ์ ๋๋ค.
React์์ props ์ ๋ชฉ์ ์ ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ component์ ์ ๊ณตํ๋ ๊ฒ ์ ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ React component ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
- State ๋ณ๊ฒฝ์ Trigger ํ ์ ์์ต๋๋ค.
- Component ์ render ๋ฉ์๋ ์์์ this.props.reactProp ๋ก ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, reactProp๋ฅผ ๋ฐ๋ element ๋ฅผ ๋ง๋ค๊ณ
<Element reactProp="1" />
์ด "reactProp" (๋๋ ์ฌ์ฉ์๊ฐ ์ฐพ์ ์ ์ํ) props๋ React๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ component์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , React์ native props ์์ญ์ ํฌํจ๋ ์์ฑ์ด ๋ฉ๋๋ค.
props.reactProp;
props์ state๋ ๋ชจ๋ JavaScript ๊ฐ์ฒด์
๋๋ค. ๋๊ฐ์ง ๋ค ๋ ๋๋ง ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, component ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ฉด์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
props๋ ํจ์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด component ์์๋ก ์ ๋ฌ๋ฉ๋๋ค. state ๋ component ์์์ ๊ด๋ฆฌ๋๊ณ ์ฌ์ฉํ ๋ณ์ ์ ์ธ๊ณผ ๋น์ทํฉ๋๋ค.