[FRI] 2022-01-07

MINBOKยท2022๋…„ 1์›” 7์ผ
0

๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ

๋ชฉ๋ก ๋ณด๊ธฐ
19/19
post-thumbnail
post-custom-banner

React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

: ์ฝ”๋“œ๋ฅผ ์ปดํฌ๋„ŒํŠธํ™”ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ

React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

1) npx create-react-app my-app
ย ย ย ย (my-app๋ง๊ณ  ๋‹ค๋ฅธ ํด๋” ์ด๋ฆ„ ์‚ฌ์šฉํ•ด๋„ ๋Œ)
2) cd my-app
3) npm start
4) ํ•„์š”์—†๋Š” ์ž๋™ ์ƒ์„ฑํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ

JSX

1. JSX๋ž€?

  • Javascript์— XML์„ ์ถ”๊ฐ€ํ•œ ๋ฌธ๋ฒ•
  • React ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ,
    ๊ณต์‹์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์€ ์•„๋‹˜
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ
    ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋Œ

2. JSX ๋ฌธ๋ฒ•

  1. ์ตœ์ƒ์œ„ ๋ถ€๋ชจ์š”์†Œ๋Š” 1๊ฐœ
  2. className์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•จ
  3. camelCase ์‚ฌ์šฉํ•จ
<div className="newClass"/> Hello </div>
  1. ์ฃผ์„
function App() {
	//์—ฌ๊ธฐ๋Š” js
  return (
    	{/* ์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” jsx */}
		<div>
			<p> ์•ˆ๋…•, 2022! </p>
			<p> ์ž˜๊ฐ€, 2021! </p>
		</div>
  );
}
  1. { }๋กœ JS๋ฅผ ์‚ฌ์šฉํ•จ
import './App.css';

function App() {
	const name = 'minbok!';
  	return (
		<div>
           <p> ์•ˆ๋…•, {name}! </p>
		</div>
  );
} 

export default App; 

// ์•ˆ๋…•, minbok!

๐Ÿฑโ€๐Ÿ‰ ์ฐธ๊ณ 
์ถœ์ฒ˜: https://goddaehee.tistory.com/296 [๊ฐ“๋Œ€ํฌ์˜ ์ž‘์€๊ณต๊ฐ„]

Fragment

๋ชฉ์ 

  • ์‹œ๋ฉ˜ํ‹ฑ ๋งˆํฌ์—…์„ ๋ฐฉํ•ดํ•˜๋Š” ์˜๋ฏธ์—†๋Š” divํƒœ๊ทธ ์‚ฌ์šฉ ๋ฐฉ์ง€
    * <React.Fragment>๋Š” html์— ํ•จ๊ป˜ ์ถœ๋ ฅ๋˜์ง€์•Š์Œ
  • index.js ์˜ <React.StrictMode> ๋„ div ๋Œ€์šฉ์ž„

์‚ฌ์šฉ๋ฐฉ๋ฒ•

1) ์ƒ๋‹จ์— ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€

import React, { Fragment } from 'react';

2) ์‚ฌ์šฉํ•œ๋‹ค

function App() {
  return (
		<React.Fragment>
			<p>๋ฐฐ๊ณ ํ”„๋‹ค</p>
			<p>๋ˆ๊นŒ์Šค ๋จน๊ณ ์‹ถ๋‹ค</p>
		</React.Fragment>
  );
}

3) <React.Fragment>๋Œ€์‹ ์— <></>์„ ์‚ฌ์šฉ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Component

๋ชฉ์ 

  • ๊ฐ€๋…์„ฑ ์ฆ๋Œ€
  • ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”

์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ

// -- App.js

function App() {
return (
  <div>
    <Greeting />
    <Time />
  </div>
);
}
// --Components > Greeting.js
// Login.js๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด๋Œ
  
import React from 'react';  // react๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ๋ช…์‹œ
import '../App.css';

function Greeting(props) {
    return(
        <React.Fragment>
			<p> ์•ˆ๋…•, 2022! </p>
			<p> ์ž˜๊ฐ€, 2021! </p>
        <React.Fragment>
    )
}

export default Greeting;

Props ํŒŒ๋ผ๋ฏธํ„ฐ

prop๋ž€?

  • props๋Š” Component๋ฅผ ๋งŒ๋“ค ๋•Œ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์˜ ์ง‘ํ•ฉ,
  • Component๋Š” props๋ผ๋Š” ์ž„์˜์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋“ค์„ ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€ ๊ธฐ์ˆ ํ•จ

์‚ฌ์šฉ

-- App.js
          
function App() {
  return (
     // ์ง€๊ธˆ์€ ์ž์‹ํƒœ๊ทธ๊ฐ€ ํ•˜๋‚˜๋ผ์„œ div๋กœ ๊ฐ์‹ธ์ง€์•Š์•„๋„ ๋Œ
      <Hello name='minbok' age='10' />

  );
}

export default App;
import './App.css';
import React, { Fragment } from 'react';

function Hello(props) {
  return(
    <React.Fragment>
      <p>์•ˆ๋…•, ๋‚œ {props.name}์ด์•ผ!</p>
      <p>๋งŒ๋‚˜์„œ ๋ฐ˜๊ฐ€์›Œ, {props.name}!</p>
      <p>๋‚œ {props.age}์‚ด์ด์•ผ!</p>
    </React.Fragment>
  ) 
}
          
// ์•ˆ๋…•, ๋‚œ minbok์ด์•ผ!
// ๋งŒ๋‚˜์„œ ๋ฐ˜๊ฐ€์›Œ, minbok!
// ๋‚œ 10์‚ด์ด์•ผ!

Node.js ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ

  • node -v : ๋ฒ„์ „ ํ™•์ธ
  • npm cache clean -f : npm ์บ์‹œ ์‚ญ์ œ
  • npm install -g n : n ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜
  • n lts : ๋…ธ๋“œ lts ๋ฒ„์ „ ์„ค์น˜

npm ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ

  • npm -v : ๋ฒ„์ „ ํ™•์ธ
  • npm i -g npm : npm ์—…๋ฐ์ดํŠธ
  • npm ํ˜„์žฌ ๋ฒ„์ „ ํ™•์ธ

๐Ÿฑโ€๐Ÿ‰ ์ฐธ๊ณ 
์ถœ์ฒ˜: https://walldaydream.tistory.com/entry/Nodejs-npm-์—…๋ฐ์ดํŠธ-ํ•˜๊ธฐ

post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€