Component
ํ๋ฉด ๊ฐ๋ฐ์ ์งํํ ๋, ์ ์ฒด ํ์ด์ง๋ฅผ ํ ๋ฒ์ ๊ทธ๋ฆฌ๊ฒ ๋๋ฉด, ํ๋์ ์์คํ์ผ์ ๋ง์ ์์ ์ฝ๋๊ฐ ์์ฑ๋๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด UI๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์์ค๋ฅผ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ์์ฑํ์ฌ ๊ฐ์ ธ๋ค ์ฐ๊ฒ ๋๋๋ฐ ์ด๋ฅผ Component(์ปดํฌ๋ํธ)๋ผ๊ณ ํฉ๋๋ค.
Component๋ฅผ ๋๋๋ ๋ฒ์๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ๋ฒํผํ๋๊น์ง๋ ๋๋ ์ ์ฌ์ฉํ ์ ๋ ์์ต๋๋ค.
๊ฐ๋ฐ์์ ๋ฅ๋ ฅ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ ์ฌ๋ฌ ๊ฐ์ Component๋ฅผ ๋ชจ์ ํ ๊ฐ์ ํ์ด์ง๋ก ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
React์์ ์ ๊ณตํ๋ Component ๋ฐฉ์์ดClass Component์ Function Component 2๊ฐ์ง ๋ฐฉ์์ด ์์ง๋ง,
์ฃผ๋ก Function Component๋ฅผ ์ฌ์ฉํ๋ฉฐ, Class Component๋ฐฉ์์ ์ฌ์ฉํ๋ค๋ฉด ์๋ง ๊ธฐ๊ฐ์ด ์ข ๋ ์ฝ๋์ด์ง ์์๊น ์๊ฐ ๋ญ๋๋ค.
์ฃผ์์ฌํญ
- ํจ์์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์
- ์์ฑ๋ช ์ camelCase๋ฅผ ์ฌ์ฉ
- JS์์ ์ฌ์ฉ๋๋ this๋ฅผ ์ฌ์ฉํ์ง ์์
์
๊ฐ๋จํ๊ฒ 2๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ 1๊ฐ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ดค์ต๋๋ค.
import Title from "../component/title";
import Content from "../component/content";
function HelloWorld() {
return (
<>
<Title language="kor"></Title>
<Content></Content>
</>
);
}
export default HelloWorld;
// title.jsx
function Title(props) {
const hello = "์๋
ํ์ธ์";
return (
<h2>
{props.language}: {hello}
</h2>
);
}
export default Title;
// content.jsx
function Content() {
return <p>๋ฐ๊ฐ์ต๋๋ค. Front-End Developer ์๊ฐ ์
๋๋ค.</p>;
}
export default Content;
JSX
React์์ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ์ผ๋ก HTML์ฒ๋ผ ์๊ฒผ์ผ๋ JS์ ๋๋ค.
Component์์ XMLํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด babel์ด JSX → JS๋ก ๋ณํํด ์ฃผ๊ฒ ๋ฉ๋๋ค.
babel์ JS์ ์ปดํ์ผ๋ฌ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
React์์ ์ฌ์ฉ๋๋ JSX๋ฌธ๋ฒ์ JS๋ฌธ๋ฒ์ผ๋ก ๋ณํํด์ฃผ๊ฒ ๋๋ฉฐ,
CRA(create-react-app)๋ก ํ๋ก์ ํธ ์์ฑ ์, babel, webpack ๋ฑ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ด ์ค์น๊ฐ ๋ฉ๋๋ค.
์
๋ค์ ์ฝ๋๋ CRA(create-react-app)๋ก ์์ฑ๋ App.js ํ์ผ์ ๋๋ค.
์๋์ ๊ฐ์ด HTML๊ณผ ๊ฐ์ด ํ๊ทธ ํ์์ผ๋ก ์๊ฒผ์ผ๋ฉฐ, return์๋ ๋ฐ๋์ ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํฉ๋๋ค.
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
์๋ฌ ๋ฐ ๊ฐ์
// return์ divํ๊ทธ๋ฅผ 2๊ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ฌ ๋ฐ์
function App() {
return (
<div className="App">
ํ
์คํธ
</div>
<div>
ํ
์คํธ
</div>
);
}
// ์๋์ ๊ฐ์ด divํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ Fragmentํ๊ทธ(๋นํ๊ทธ)๋ฅผ ์ถ๊ฐ
return (
<div>
<div className="App">
ํ
์คํธ
</div>
<div>
ํ
์คํธ
</div>
</div>
);
// ๋๋
return (
<Fragment> {/* <> JSX์์์์ ์ฃผ์์ฒ๋ฆฌ */}
<div className="App">
ํ
์คํธ
</div>
<div>
ํ
์คํธ
</div>
</Fragment> // </>
);
๋ณ์์ฌ์ฉํ๊ธฐ
JSX์์ return ํด์ค ๋, ์ ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ {๋ณ์} ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
(`hello`๋ผ๋ ๋ณ์ ์ฌ์ฉ)
import logo from './logo.svg';
import './App.css';
function App() {
const hello = "์๋
ํ์ธ์.";
return (
<div className="App">
<p>
Edit <code>src/App.js</code> and save to reload.
{hello}
</p>
</div>
);
}
export default App;
์กฐ๊ฑด๋ฌธ
return๋ฌธ ์์์๋ if๋ฌธ์ด ์๋ ์ผํญ์ฐ์ฐ์ ๋๋ ๋ณดํธ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
return (
<div>
<img src="์ฃผ์" className={condition ? 'imageHighlight' : 'image'} />
{condition && <button onClick={onClickButton}>ํด๋ฆญ</button>}
</div>
);
CSS
ํ๊ทธ์ css์ ๋ ฅ์ class๊ฐ ์๋ className์ ์ฌ์ฉํฉ๋๋ค. (class๋ JS ์ฝ์ด์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ ๋จ)
className์ cssํ์ผ์ ์ ์ธ๋ name์ ์ ์ฉ์์ผ๋ ๋๊ณ , (labelํ๊ทธ์ ๊ฒฝ์ฐ for ๋์ htmlFor ์ฌ์ฉ)
style์ ๋ณ์์ ๋ด๊ฑฐ๋ inline์คํ์ผ๋ก ์ง์ ๋ฃ์ด์ค๋ ๋๋,
CSSํ์ผ์์ ์ฒ๋ผ ์คํ์ผ ์ด๋ฆ์ -(ํ์ดํฐ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์นด๋ฉํ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉ
(`appHeaderStyle`๋ผ๋ ๋ณ์ ์ฌ์ฉ)
import logo from './logo.svg';
import './App.css';
function App() {
const appHeaderStyle = {
backgroundColor: "#282c34",
minHeight: '100vh',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
fontSize: 'calc(10px + 2vmin)',
color: 'white',
}
return (
<div className="App">
<header className="App-header" style={appHeaderStyle}>
<img src={logo} className="App-logo" alt="logo"
style={{
height: '40vmin',
pointerEvents: 'none'
}}/>
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
'Front-End > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React] Hook (0) | 2023.06.20 |
---|---|
React] Hook : useState (1) | 2023.06.06 |
React] Hook : props (1) | 2023.06.06 |
React] Import & export (0) | 2023.06.06 |
React] React ๋...? (0) | 2023.06.04 |