Frontend ๐Ÿ“š/React

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part1 - React Bootstrap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, export default / import ๋ฌธ๋ฒ•

leejaejae 2023. 10. 16. 15:23

โœ๏ธ ์‹œ์ž‘ ์ „์— ์ƒˆ๋กœ์šด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ! ์•„๋ž˜ ์ฐธ๊ณ .

2023.10.11 - [React/[์™„๊ฐ•] [์ฝ”๋”ฉ์• ํ”Œ] React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๊นŒ์ง€!] - [ ์ฝ”๋”ฉ์• ํ”Œ ] React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ Part1

 

[ ์ฝ”๋”ฉ์• ํ”Œ ] React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ Part1

โœ๏ธ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์น˜ ๋ฐ ์„ธํŒ… 1. ๊ตฌ๊ธ€์— Nodejs๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ LTS๋ผ๊ณ  ์จ์žˆ๋Š” ๋ฒ„์ „์„ ์„ค์น˜ 2. Visual Studoi Code ์—๋””ํ„ฐ ์„ค์น˜ โœ๏ธ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ 1. ์ž‘์—…์šฉ ํด๋” ๋งŒ๋“ค๊ธฐ(์ฐพ๊ธฐ ์‰ฝ๊ฒŒ ๋ฐ”ํƒ•ํ™”๋ฉด์— ๋งŒ๋“ค๊ธฐ

jaejae-sosp.tistory.com

 

โœ๏ธ React-Bootstrap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ

- react bootstrap ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ„ํŠผ, ๋ฉ”๋‰ด์— ์ ์šฉ๋˜๋Š” html, css ์ง์ ‘ ๋””์ž์ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค..!

โœ๏ธ ์„ค์น˜
1. ์—๋””ํ„ฐ์—์„œ ํ„ฐ๋ฏธ๋„ ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ ์ž…๋ ฅ

npm install react-bootstrap bootstrap

2. ์–ด๋–ค ์Šคํƒ€์ผ์€ Bootstrap CSS ํŒŒ์ผ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค
- ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๊ทธ ์‚ฌ์ดํŠธ์— ์žˆ๋Š” CSS ํŒŒ์ผ์„ index.html ํŒŒ์ผ์˜ <head> ํƒœ๊ทธ ์•ˆ์— ๋ณต๋ถ™

์‚ฌ์ดํŠธ ๋‚ด์—์„œ ์ฐพ์•„์„œ ๋ณต๋ถ™ํ•˜๋ฉด ๋จ

- ๊ธธ์–ด์„œ ์‹ซ์œผ๋ฉด App.js์— import 'bootstrap/dist/css/bootstrap.min.css'; ์ด๋ ‡๊ฒŒ ์ง‘์–ด๋„ฃ์–ด๋„ ๋จ

โœ๏ธ React-Bootstrap ์‚ฌ์šฉ๋ฒ•
- ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ„ํŠผ์ด ํ•„์š”ํ•˜๋ฉด React-Bootstrap ์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ์—์ œ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•˜๋ฉด ๋ฒ„ํŠผ ์ƒ์„ฑ ๋์ด๋‹ค.

import {Button} from 'react-bootstrap'

function App(){
  return (
    <div>
      <Button variant="primary">Primary</Button>  <!-- ํŒŒ๋ž€ ๋ฒ„ํŠผ ์ƒ์„ฑ -->
    </div>
  )
}

- ์ƒ๋‹จ๋ฉ”๋‰ด๋ฐ” ์˜ˆ์‹œ

import {Button, Navbar, Container, Nav} from 'react-bootstrap'

function App(){
  return (
    <div>
      <Navbar bg="dark" variant="dark">
        <Container>
        <Navbar.Brand href="#home">Navbar</Navbar.Brand>
        <Nav className="me-auto">
          <Nav.Link href="#home">Home</Nav.Link>
          <Nav.Link href="#features">Features</Nav.Link>
          <Nav.Link href="#pricing">Pricing</Nav.Link>
        </Nav>
        </Container>
      </Navbar>
    </div>
  )
}

 

๐Ÿ’‍โ™€๏ธ ๋Œ€๋ฌธ ๋งŒ๋“ค๊ธฐ

- ๋ฉ”์ธ ํŽ˜์ด์ง€์— ํฐ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด๋ณด์ž

(App.css)

.main-bg {
  height : 300px;
  background-image : url('./bg.png');
  background-size : cover;
  background-position : center;
}

- css ํŒŒ์ผ์—์„œ src ํด๋”์•ˆ์— ์žˆ๋Š” ์‚ฌ์ง„์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด ./์ด๋ฏธ์ง€๊ฒฝ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

โœ๏ธ html ์•ˆ์— src ํด๋”์˜ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ณ  ์‹ถ์œผ๋ฉด
- ์ด๋ฏธ์ง€๋ฅผ import ํ•ด์˜ค๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

import bg from './bg.png'  // import ์ž‘๋ช… from './์ด๋ฏธ์ง€๊ฒฝ๋กœ'

function App(){
  return (
    <div>
      <div className="main-bg" style={{ backgroundImage : 'url(' + bg + ')' }}></div>
    </div>
  )
}

- ์ด๋ฏธ์ง€๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ๊ณณ์—์„œ ์ž‘๋ช…ํ•œ ๊ฑธ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. <img>ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด <img src={bg}/> ์ด๋ ‡๊ฒŒ ์จ๋„ ๋ณด์ธ๋‹ค.

โœ๏ธ ํ™”๋ฉด์„ ๊ฐ€๋กœ๋กœ 3๋“ฑ๋ถ„ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

<div className="container">
  <div className="row">
    <div className="col-md-4">์•ˆ๋…•</div>
    <div className="col-md-4">์•ˆ๋…•</div>
    <div className="col-md-4">์•ˆ๋…•</div>
  </div>
</div>


๐Ÿ’‍โ™€๏ธ ์‡ผํ•‘๋ชฐ ์ƒํ’ˆ 3๊ฐœ ์ง„์—ด

function App(){
  return (
    <div className="App">
      (Navbar์™€ ๋Œ€๋ฌธ์€ ์ƒ๋žต)

      <div className="container">
        <div className="row">
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes1.jpg" width="80%" />
            <h4>์ƒํ’ˆ๋ช…</h4>
            <p>์ƒํ’ˆ์ •๋ณด</p>
          </div>
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes2.jpg" width="80%" />
            <h4>์ƒํ’ˆ๋ช…</h4>
            <p>์ƒํ’ˆ์ •๋ณด</p>
          </div>
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes3.jpg" width="80%" />
            <h4>์ƒํ’ˆ๋ช…</h4>
            <p>์ƒํ’ˆ์ •๋ณด</p>
          </div>
        </div>
      </div>
    </div>
  )
}

 

โœ๏ธ public ํด๋”์˜ ์šฉ๋„

- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†Œ์Šค์ฝ”๋“œ๋Š” src ํด๋”์— ๋ณด๊ด€ํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ด๋ฏธ์ง€๊ฐ™์€ state ํŒŒ์ผ์˜ ๊ฒฝ์šฐ public ํด๋”์— ๋ณด๊ด€ํ•ด๋„ ๋œ๋‹ค

- ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœ์„ ๋๋‚ด๋ฉด build ์ž‘์—…์ด๋ผ๋Š”๊ฑธ ํ•˜๋Š”๋ฐ ์ง€๊ธˆ๊นŒ์ง€ ์งฐ๋˜ ์ฝ”๋“œ๋ฅผ ํ•œ ํŒŒ์ผ๋กœ ์••์ถ•ํ•ด์ฃผ๋Š” ์ž‘์—…์ด๋‹ค
- src ํด๋”์— ์žˆ๋˜ ์ฝ”๋“œ์™€ ํŒŒ์ผ์€ ๋‹ค ์••์ถ•์ด ๋˜๋Š”๋ฐ public ํด๋”์— ์žˆ๋Š” ๊ฒƒ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•ด์ค€๋‹ค.

- ๊ทธ๋ž˜์„œ ํ˜•ํƒœ๋ฅผ ๋ณด์กดํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ์€ public ํด๋”์— ๋„ฃ์œผ๋ฉด ๋˜๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ฏธ์ง€, txt, json ๋“ฑ๊ณผ ๊ฐ™์ด ์ˆ˜์ •์ด ํ•„์š”์—†๋Š” static ํŒŒ์ผ๋“ค์ด ๊ทธ ๊ฒฝ์šฐ์ด๋‹ค. 

โœ๏ธ public ํด๋”์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ์‚ฌ์šฉํ•  ๋•

<img src="/logo192.png" />  <!-- /์ด๋ฏธ์ง€ ๊ฒฝ๋กœ -->

<!-- ๊ถŒ์žฅ ๋ฐฉ์‹ -->
<img src={process.env.PUBLIC_URL + '/logo192.png'} /> 
<!-- 
๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“  html ํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•  ๋•Œ codingapple.com/์–ด์ฉŒ๊ตฌ/ ๊ฒฝ๋กœ์— ๋ฐฐํฌํ•˜๋ฉด 
/logo192.png ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Œ.
๊ทธ๋ž˜์„œ /์–ด์ฉŒ๊ตฌ/ ๋ฅผ ๋œปํ•˜๋Š” process.env.PUBLIC_URL ์ด๊ฒƒ๋„ ๋”ํ•ด์ฃผ๋ฉด ๋จ.
-->

- ๊ทธ๋ž˜์„œ ํŽ˜์ด์ง€์— ์ด๋ฏธ์ง€ 100์žฅ์„ ๋„ฃ์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, public ํด๋”์— ๋„ฃ์œผ๋ฉด import 100๋ฒˆ ์•ˆํ•ด๋„ ๋จ! ํŽธ๋ฆฌ!

 

โœ๏ธ  export default / import ๋ฌธ๋ฒ•

๐Ÿ’‍โ™€๏ธ ํ•„์š”ํ•œ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ

[
  {
    id : 0,
    title : "White and Black",
    content : "Born in France",
    price : 120000
  },

  {
    id : 1,
    title : "Red Knit",
    content : "Born in Seoul",
    price : 110000
  },

  {
    id : 2,
    title : "Grey Yordan",
    content : "Born in the States",
    price : 130000
  }
]

- ์‹ค์ œ ์„œ๋น„์Šค์˜€์œผ๋ฉด ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ด!

โœ๏ธ export default / import ๋ฌธ๋ฒ•
- ์œ„์— ์žˆ๋Š” ์ƒํ’ˆ ์ •๋ณด๋ฅผ useState() ์•ˆ์— ๋„ฃ๊ธฐ์—” ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŒŒ์ผ์— ๋ณด๊ด€ํ–ˆ๋‹ค๊ฐ€ importํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
- ์˜ˆ๋ฅผ ๋“ค์–ด data.js๋ผ๋Š” ํŒŒ์ผ์— ์žˆ๋˜ ๋ณ€์ˆ˜๋ฅผ App.js์—์„œ ๊ฐ€์ ธ์™€์„œ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด

// data.js ํŒŒ์ผ

let a = 10;
export default a;

- export default ๋ณ€์ˆ˜๋ช…: ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ์›ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ฐ–์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค

// App.js ํŒŒ์ผ

import a from './data.js';
console.log(a)

- export ํ–ˆ๋˜ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด import ์ž‘๋ช… from './ํŒŒ์ผ๊ฒฝ๋กœ'ํ•˜๋ฉด ๋œ๋‹ค.

- ์œ ์˜์ !
- ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ์ž๋ฃŒํ˜• ๋ชจ๋‘ export ๊ฐ€๋Šฅ
- ํŒŒ์ผ๋งˆ๋‹ค export default ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋Š” ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ./ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค. ํ˜„์žฌ๊ฒฝ๋กœ๋ผ๋Š” ๋œป

โœ๏ธ export { } / import { } ๋ฌธ๋ฒ•
- ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ณ€์ˆ˜๋“ค์„ ๋‚ด๋ณด๋‚ด๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๋ฒ• ์‚ฌ์šฉ

// data.js ํŒŒ์ผ

var name1 = 'Kim';
var name2 = 'Park';
export { name1, name2 }

- ๊ทธ๋Ÿผ ์›ํ•˜๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ์—ฌ๋Ÿฌ๊ฐœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

// App.js ํŒŒ์ผ

import { name1, name2 } from './data.js';

- export {} ์ด๊ฑธ๋กœ ๋‚ด๋ณด๋ƒˆ์œผ๋ฉด ๊ฐ€์ ธ๋‹ค๊ฐ€ ์“ธ ๋•Œ import {} ๋ฌธ๋ฒ• ์‚ฌ์šฉ

- ์œ ์˜์ !
- export {} ํ–ˆ๋˜ ๊ฒƒ๋“ค์€ import {} ์“ธ ๋•Œ ์ž์œ ์ž‘๋ช…์ด ๋ถˆ๊ฐ€๋Šฅํ•จ. export ํ–ˆ๋˜ ๋ณ€์ˆ˜๋ช… ๊ทธ๋Œ€๋กœ ์ ์–ด์•ผ ํ•จ.

๐Ÿ’‍โ™€๏ธ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ €์žฅํ•ด๋ณด๊ธฐ

// data.js ํŒŒ์ผ

let data = [
  {
    id : 0,
    title : "White and Black",
    content : "Born in France",
    price : 120000
  },

  {
    id : 1,
    title : "Red Knit",
    content : "Born in Seoul",
    price : 110000
  },

  {
    id : 2,
    title : "Grey Yordan",
    content : "Born in the States",
    price : 130000
  }
] ;
export default data
// App.js ํŒŒ์ผ

import data from './data.js';

function App(){
  let [shoes] = useState(data);
  return (
    <div className="App">
      (์ƒ๋žต)
      <div className="container">
        <div className="row">
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes1.jpg" width="80%" />
            <h4>{ shoes[0].title }</h4>
            <p>{ shoes[0].price }</p>
          </div>
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes2.jpg" width="80%" />
            <h4>์ƒํ’ˆ๋ช…</h4>
            <p>์ƒํ’ˆ์ •๋ณด</p>
          </div>
          <div className="col-md-4">
            <img src="https://codingapple1.github.io/shop/shoes3.jpg" width="80%" />
            <h4>์ƒํ’ˆ๋ช…</h4>
            <p>์ƒํ’ˆ์ •๋ณด</p>
          </div>
        </div>
      </div>
    </div>
  )
}

}

๋ณธ ํฌ์ŠคํŒ…์€ << React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๊นŒ์ง€! >> ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.