[React] props

    1. props๋ž€? React์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. React์˜ Data Flow๋Š” ๋‹จ๋ฐฉํ–ฅ ํ˜•์‹์œผ๋กœ ๋ถ€๋ชจ์—๊ฒŒ์„œ ์ž์‹์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊พธ๋กœ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, props์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ์˜ค์ง ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค. 2. props ์‚ฌ์šฉ ์˜ˆ์‹œ 2-1. Hello ์ปดํฌ๋„ŒํŠธ์—์„œ name ๊ฐ’ ์‚ฌ์šฉํ•˜๊ธฐ ๐ŸŒ  App.js import React from 'react'; import Hello from './Hello'; function App() { return ( ); } export default App; ๐ŸŒ  Hello.js import React from "react"; function Hello(props) { re..

    [React] useEffect

    1. useEffect ํ•จ์ˆ˜๋ž€? React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Hook 2. useEffect ์‚ฌ์šฉ๋ฒ• ๐Ÿ”น ์ฒซ ๋ฒˆ์งธ useEffect(() => {}); useEffect์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ํ˜•ํƒœ์ด๋‚˜, ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. Dependency๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์€ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค useEffect๊ฐ€ ๋ฐœ๋™๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์‹คํ–‰์ด ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๐Ÿ”น ๋‘ ๋ฒˆ์งธ useEffect(() => {}, []); useEffect์—์„œ ์„ค์ •ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๊ฐ€์žฅ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•œ๋‹ค. ๐Ÿ”น ์„ธ ๋ฒˆ์งธ useEffect(() => {}, [name]); useEffect๋ฅผ ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค. useEffect๋ฅผ ๋ Œ๋”๋ง ํ›„ ํ•œ๋ฒˆ, ๊ทธ๋ฆฌ๊ณ ..

    [React] ๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

    ๐ŸŽฏ ๋ฆฌ์•กํŠธ ์„ค์น˜ ๋ฐ ์…‹ํŒ… ๋ช…๋ น์–ด 1. Node.js ๊ฒ€์ƒ‰ ํ›„ ์ตœ์‹ ๋ฒ„์ „์„ ์„ค์น˜ํ•œ๋‹ค. 2. Visual Studio Code ์—๋””ํ„ฐ๋ฅผ ์„ค์น˜ํ•œ๋‹ค. 3. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํด๋”๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์—๋””ํ„ฐ์—์„œ ์ž‘์—…ํด๋”๋ฅผ Open Folder ํ•œ๋‹ค. 4. ํ„ฐ๋ฏธ๋„์—์„œ npx create-react-app ํ”„๋กœ์ ํŠธ๋ช…์„ ์ž…๋ ฅํ•ด์„œ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 5. cd ํ”„๋กœ์ ํŠธ๋ช…(ํด๋”) ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ช…์˜ ํ•˜์œ„ํด๋”๋กœ ์ด๋™ํ•œ๋‹ค. 6. ์ฝ”๋“œ ์ž‘์„ฑ ํ›„, ํ„ฐ๋ฏธ๋„์—์„œ npm start๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๐ŸŽฏ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ •๋ฆฌ ๋ฐ ํ™•์ธํ•  ํŒŒ์ผ 1. public ํด๋” > logo.png, manifest.json ์‚ญ์ œ 2. src ํด๋” > App.js์—์„œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋กœ๋“œ ํ›„ ์‚ฌ์šฉ ๐ŸŽฏ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ git rep..

    [React] ์ปดํฌ๋„ŒํŠธ์™€ state

    1. Component ์ปดํฌ๋„ŒํŠธ(Component)๋ž€, ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ, UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„์ ์ธ ๋ทฐ ๋‹จ์œ„์ด๋‹ค. ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ํ™”๋ฉด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” JavaScript์˜ ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•œ๋‹ค. (์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค: ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ณต์žฅ) 2. State setState(): ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค. state๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์œผ๋กœ, Hooks์ค‘ ํ•˜๋‚˜์ธ useState๋ฅผ ํ†ตํ•ด ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. state๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋˜๋Š” props์™€ ๋‹ฌ๋ฆฌ, ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ปดํฌ๋„Œ..

    [CSS] ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ, ๋ทฐํฌํŠธ

    1. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ [ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ] @media [only ๋˜๋Š” not][๋ฏธ๋””์–ด ์œ ํ˜•][and ๋˜๋Š” ,] (์กฐ๊ฑด๋ฌธ){์‹คํ–‰๋ฌธ} ๐Ÿ‘‰ and ๊ตฌ๋ฌธ ๋’ค ๊ณต๋ฐฑ ํ•„์ˆ˜! [ ์ ์šฉ ๋ฐฉ๋ฒ• ] [ min/max ] ํ•ด์ƒ๋„๋ณ„๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ min : ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑ max : ํฌ๊ธฐ๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋กœ ํฌ๊ธฐ ๊ฐ์ง€ํ•  ๋•Œ๋Š” ๋ทฐํฌํŠธ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ง€ 2. ๋ทฐํฌํŠธ ํ™”๋ฉด์—์„œ ์‹ค์ œ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜๋Š” ์˜์—ญ Desktop : ์„ค์ •ํ•œ ํ•ด์ƒ๋„ Device : ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฐ’ [ ์†์„ฑ ] width device-width, ์–‘์ˆ˜ ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„ height device-height, ์–‘์ˆ˜ ๋ทฐํฌํŠธ์˜ ๋†’์ด initial-scale ์–‘์ˆ˜ ๋ทฐํฌํŠธ์˜ ์ดˆ๊ธฐ ๋ฐฐ์œจ, ๊ธฐ๋ณธ๊ฐ’=1 user-scalable yes, ..

    [CSS] ๊ฐ€๋ณ€ ๊ทธ๋ฆฌ๋“œ, ๋งˆ์ง„, ํŒจ๋”ฉ, ํฐํŠธ

    [ ๊ณต์‹ ] (๊ฐ€๋ณ€ ํฌ๊ธฐ๋กœ ๋งŒ๋“ค ๋ฐ•์Šค์˜ ๊ฐ€๋กœ ๋„ˆ๋น„ / ๊ฐ€๋ณ€ ํฌ๊ธฐ๋กœ ๋งŒ๋“ค ๋ฐ•์Šค๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ฐ•์Šค์˜ ๊ฐ€๋กœ ๋„ˆ๋น„) * 100 = ๊ฐ€๋ณ€ ํฌ๊ธฐ์˜ % ๊ฐ’ ๐Ÿ‘‰ ๊ฐ€๋ณ€ ๊ทธ๋ฆฌ๋“œ, ๋งˆ์ง„, ํŒจ๋”ฉ์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ (๋‹จ, ํŒจ๋”ฉ์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ) px๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค [ id = "wrap / wrapper" ] ๋ชจ๋“  ํƒœ๊ทธ๋ฅผ ๊ฐ์‹ธ๋Š” ๋ฐ•์Šค ์›น ๋ฌธ์„œ ๋‚ด์šฉ ์ „์ฒด์˜ ํฌ๊ธฐ๋‚˜ ๋ฐฐ๊ฒฝ์ƒ‰ ๋“ฑ ํ•œ๊บผ๋ฒˆ์— ์กฐ์ ˆ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ์›น ๋ฌธ์„œ์˜ ๋‚ด์šฉ ์ค‘์•™์— ๋ฐฐ์น˜ ๋ฐ˜์‘ํ˜• ์›น์—์„œ ์ž์‹ ๋ฐ•์Šค๋“ค์ด ๊ฐ€๋ณ€ ํฌ๊ธฐ๋กœ ์„ค์ •๋˜์—ˆ์„ ๋•Œ ๋ฌด์ œํ•œ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ ๋ฐฉ์ง€ ์ž์‹ ๋ฐ•์Šค๋“ค ๊ฐ€๋ณ€ ํฌ๊ธฐ๋กœ ๋งŒ๋“ค ๋•Œ ๊ธฐ์ค€ ํฌ๊ธฐ๋กœ ์‚ฌ์šฉ ๊ฐ€์žฅ ์ƒ์œ„์˜ ๋ฐ•์Šค -> ๊ฐ€๋ณ€ ๊ทธ๋ฆฌ๋“œ ๊ณ„์‚ฐ ์‹œ ๊ธฐ์ค€์ด ๋  ๋ฐ•์Šค ์—†์Œ [ ๊ฐ€๋ณ€ ํŒจ๋”ฉ ์ ์šฉ ๋ฐฉ๋ฒ• ] ๋ฐฉ๋ฒ• 1. ๊ธฐ๋ณธ ๋ฐฉ๋ฒ• (๊ฐ€๋ณ€ ํŒจ๋”ฉ์„ ์ ์šฉ..

    [CSS] ๋ฐ˜์‘ํ˜• ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ

    /* Large desktop */ @media (min-width: 1500px) { ... } /* Portrait tablet to landscape and desktop */ @media (min-width: 768px) and (max-width: 979px) { ... } /* Landscape phone to portrait tablet */ @media (max-width: 767px) { ... } /* Landscape phones and down */ @media (max-width: 480px) { ... }

    [CSS] em, rem ๊ทธ๋ฆฌ๊ณ  css์˜ ๋‹จ์œ„๋“ค

    .selector { property: value; } Absolute length units : px Relative length units : em, rem, vw, vh, % 1. em - typography์—์„œ ํ˜„์žฌ ์ง€์ •๋œ point size ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์œ„ / ํ˜„์žฌ ํฐํŠธ size ๋‚˜ํƒ€๋ƒ„ - ์„ ํƒ๋œ ํฐํŠธ์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๊ณ ์ •๋œ ํฐํŠธ ์‚ฌ์ด์ฆˆ ๊ฐ€์ง„๋‹ค - ๋ถ€๋ชจ์˜ ํฐํŠธ์‚ฌ์ด์ฆˆ์— ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๊ณ„์‚ฐ๋œ๋‹ค - ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ํฐํŠธ : 16px - ex) 8em = 16 * 8 = 128px = 800% 2. rem - root em - root์— ์ง€์ •๋œ ํฐํŠธ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ํฌ๊ธฐ ๊ฒฐ์ • 3. vw, vh, wmin, wmax - ๋ถ€๋ชจ ์š”์†Œ์™€๋Š” ์ƒ๊ด€ ์—†๋‹ค, ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๊ธฐ์— ์˜์กด - 100vw : viewport ๋„ˆ..