MVVM ์ํคํ
์ณ ๋์์ธ ํจํด MVVM์ Model - View - View Model์ ์ฝ์๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ presentation UI๋ฅผ ๋ถ๋ฆฌํ๋ ํจํด์ด๋ค. View ์ฑ์ ๋ณด์ฌ์ง๋ UI View Model ์ฑ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๊ณ ์์ ๋ทฐ์ ๋ชจ๋ธ ์ฌ์ด์์ ๋ทฐ์ ์์ฒญ์ ๋ฐ๋ผ ๋ก์ง์ ์คํ ๋ชจ๋ธ ๋ฐ์ดํฐ์ ๋ณํ์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ๊ฐฑ์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณต Model ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ๋ทฐ๋ชจ๋ธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๋ต ๋ทฐ ui ์ปดํฌ๋ํธ์ด๋ค. ์์ ์ปดํฌ๋ํธ์์ props๋ก ์ ๋ฌ๋ฐ์ ์ํ์ ๋ฐ๋ผ์ ํ๋ฉด์ด ๋์ํ๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ฉด ์ด๋ฒคํธ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ทฐ์์ ๋ฐ๋ก ์ฒ๋ฆฌํ์ง์๊ณ , ์์ ์ปจํ
์ด๋์ธ View Model ์ปจํ
์ด๋์์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค. interface..
์ ์ฒด ๊ธ
๋ฐ์ดํฐ ๊ตฌ์กฐ ์ํ๋ ๋ฐฐ์ด ํ์
์ด๊ณ , ๋ฐฐ์ด์ ์์๋ ๊ฐ object ๊ฐ์ฒด์ด๋ค. const initialState = [{id: '1', isDone: false }, {id: '2', isDone: false }, ...] ๋ชฉํ ์์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ ์ญ ์ํ state ๋ฐฐ์ด์์ ํด๋นํ๋ ์์๋ฅผ ๋จผ์ ์ฐพ๊ณ , isDone ์์ฑ์ ๋ฐ๊พธ๊ณ ์ถ๋ค. redux toolkit์ ์ฌ์ฉํด์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ, ๋ฐฐ์ด ์ ํน์ ์์์ ์์ฑ isDone์ ์ ์ ๊ฐ ๋๋ฅด๋ checkbox ์ด๋ฒคํธ ๊ฐ๋๋ก ๋ฐ๊ฟ์ผํ๋ค. UI ์ฝ๋ ์ ์ ๊ฐ ์ฒดํฌํ๋ ์ฒดํฌ๋ฐ์ค์ event.target.checked ๊ฐ์ ๋ฐ์์ rtk ์ฌ๋ผ์ด์ค๋ก dispatchํ๋ ์ฝ๋ export interface Todo { id: string; isDo..
์๋ ์๋ฌธ์๋ก ์์ํ๋ barChartSlice.ts ํ์ผ์ด๋ฆ์ vscode์์ ๋๋ฌธ์๋ก BarChartSlice.ts ๋ฐ๊พธ๊ณ , github์ ์๊ฒฉ์ ์ฅ์๋ก ํธ์ฌํ๋ค. ํ์ง๋ง, ์
๋ฐ์ดํธ๋ ์๊ฒฉ์ ์ฅ์์๋ ๋๋ฌธ์๋ก ๋ฐ๋ ํ์ผ๋ช
์ด ๋ฐ์์ด ์๋์ด์์๋ค. git์ ๋/์๋ฌธ์ ๊ตฌ๋ถ์ ํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ํ์ผ ์ด๋ฆ์ ๋๊ฐ์ง๋ง ๋/์๋ฌธ์๋ง ๋ณ๊ฒฝํด์ ๋ค์ ์๊ฒฉ์ ์ฅ์๋ก push ํ๋ ๊ฒฝ์ฐ, rename ํด์ฃผ๋ ๋ช
๋ น์ด๋ก ์ง์ ํ์ผ์ด๋ฆ์ ์์ ํด์ฃผ์ด์ผ ํ๋ค. ์ด๋ ์ฐ๋ ๋ช
๋ น์ด? git mv mv๋ move๋ฅผ ํํํ ์ฝ์์ธ๋ฐ, ๊ณต์๋ฌธ์์ ๋ณด๋ฉด move or rename a file, a directory๋ผ๊ณ ๋์จ๋ค. git mv ํ์ผ์ ์ด๋ฆ์ rename ํด์ค๋ค. git mv ํ์ผ์ด ์์นํด์๋ ๋๋ ํ ๋ฆฌ ์์น๋ฅผ ์ด๋์ํจ๋ค. ๊ทธ๋ฐ๋ฐ..
์ํฉ d3 ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก line ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ, ์ฐจํธ์ ๊ทธ๋ ค์ง๋ value ๊ฐ์ด 0์ผ๋๋ ๋ผ์ธ ์ฐจํธ๊ฐ ์์ ๋ํ๋์ง ์๊ณ , ๋ค๋ฅธ ๊ฐ์ด ์์๋๋ ์ฐจํธ๊ฐ ๊ทธ๋ ค์ง๋ค๊ฐ 0์ด ๋์ค๋ฉด ์ฐจํธ๊ฐ ๋๊ธฐ๋ ์ด์ํ ํ์์ด ์์๋ค. Error: attribute d: Expected number, "M36.5,NaNL79.5,NaNL122…". ๊ฒ๋ค๊ฐ ์ฝ์์๋ ์ด๋ฐ ์๋ฌ๊ฐ ์ฐํ๊ณ ์์๋ค. ๊ธฐ์กด import { line } from 'd3-shape'; const LineChart = ({bars, xScale, yScale}) => { const lineGenerator = line() .x((bar) => xScale(bar.data.indexValue) + bar.width / 2) .y((bar) => yScal..
๋์ ๊ธฐ์ ๋ธ๋ก๊ทธ๋ ์ ์
์ด ์ ๋ง ์๋ ํธ์ด๋ผ ๋ณ๋ก ์ฌ๋ฏธ๊ฐ์์ด์ ์ ์์ผ๋ค… ๐ซ ๊ทธ์น๋ง… ๋์ค์ ๋ณด๋ฉด ๋ด๊ฐ ์ฌ๋ฐ์ผ๋๊น ์จ๋ณด๋ ์ฒซ์ถ๊ทผ ์ผ๊ธฐ ๋ฒ์จ ์ฒซ ์ถ๊ทผ ํ ์ฃผ๊ฐ ๊ฐ๊ณ ํ๋ฒ์ ์ฃผ๋ง์ด ์ง๋๊ฐ๋ค. ์๊ฐ ์ ๋ง ๋น ๋ฅด๊ณ ์ ์ ์๊ณ ์ฌ์ ํ ๋ชธ๊ณผ ๋ง์์ด ์ ์์ค์ธ ์ํ์ด๋ค. ใ
ใ
์๋ ์ฒซ์ถ๊ทผํ๊ณ ๋น์ผ๋ ์๊ฐ์ ๋จ๊ฒจ๋๊ณ ์ถ์๋ฐ ๊ทธ ์ ๋ ๊ฑฑ์ ์ด ๋์ด์์ธ์ง ๊ฑฐ์ ์ ์ ๊น๊ฒ ๋ชป์ค๋ค… ๊ทธ๋์ ์ฒซ์งธ๋ ์ง์ ์ข๋น๋์ ์์ ๋จธ๋ฆฌ๊ฐ ๊นจ์ง๋ ์ค.. ๊ทธ๋์ ๊ธ ์ธ ์ฌ์ ์์๊ณ ์ง๊ธ๋ ์ฌ์ค ๋ฉฐ์น ์งธ ์ ์ ๊น๊ฒ ์ ๋ชป์์ ๋งค์ฐ ํผ๊ณคํ ์ํ์ง๋ง.. (์ฝ๊ฐ ๋ฐค์์ ์๋ฒฝ๋นํ๊ธฐ ํ๊ณ ์จ๋ ๋ฐค ๋๋..) ๊ทธ๋๋ ์ง๊ธ ๊ธฐ๋กํ์ง์์ผ๋ฉด ๊ธ๋ฐฉ ๋ ๋๋ผ๋ ๊ฒ๋ค์ด ๋ค ๋ ๋ผ๊ฐ ๊ฒ์ด๋ฏ๋ก ์ง๊ธ ๊ธฐ๋กํด๋ณธ๋ค. ๊ฐ๋ณด์๊ณ ~~ ๋ง์ง๋ง์ผ๋ก ํ์ฌ์ ์ถ๊ทผํ๋๊ฒ 22๋
1์์ด์์ผ๋๊น ํด์ฌํ..
react ๊ธฐ๋ณธ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค์ด๋ todo app์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฐ์ฐ๊ณ ํ๋ฒ ๋ง์ด๊ทธ๋ ์ด์
ํด๋ณด์๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ฉด์ ์ปดํ์ผ์์ ์๋ฌ ๋ด์ฃผ๋ ๊ฒ๋ค์ ๋๋ฆ ์ด๊ฒ์ ๊ฒ ํด๋ณด๋ฉด์ ๋นจ๊ฐ ์ค ๋ค ์์ด๋ค๊ณ ์ข์ํ๋๋ฐ ์ค์ ๋ก ์ผ๋ณด๋ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ....??? ์ด๊ฑธ ๋๋ฒ๊น
ํ๋๋ฐ๋ ์๊ฐ์ ์ผ๋ง๋ ๋ค์๋์ง... ^^ ๋ค์์ ์ค์ํ์ง ์๊ธฐ์ํด ๊ธฐ๋กํด๋ณธ๋ค! ๐ ๋ฌธ์ form ํ๊ทธ์ submit ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํด๋์ด์ input์ ์์ฑํ๊ณ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ด์ฉ์ด ์๋ฒ๋ก ๊ฐ๊ณ ํ๋ฉด ๋ฆฌ์คํธ์ ์ถ๊ฐ๊ฐ ๋์ด์ผํจ. But, ์๊พธ ํ๋ฉด์ด ์๋ก๊ณ ์นจ๋จ. ์๋ฌด๋ฐ ์ฝ์๋ ์๋ณด์ด๊ณ ๊ทธ๋ฅ ์์ ์๋ก์ด ํ๋ฉด ์ด๊ฒ e.preventDefault()๊ฐ ์๋์ ์ํด์ ๊ทธ๋ฐ๊ฑด์ง๋ ํ์ฐธ ์ดํ์ ๊นจ๋ฌ์๋ค... ๐ form ํ๊ทธ ์ฌ์ฉํ..
hana@Hanaui-MacBookAir ~ % npm install -g typescript npm ERR! code EACCES npm ERR! syscall mkdir npm ERR! path /usr/local/lib/node_modules/typescript npm ERR! errno -13 npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/typescript' npm ERR! [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/typescript'] { npm ERR! errno: -13, npm ERR! code: 'EACCES',..
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ํด๊ฒฐํ๊ธฐ์ด๋ ค์์ ์ ๋จน์๋ ๋ถ๋ถ์ด ์๋ค. ๋ฐ๋ก App.js์ useEffect ๋น๋๊ธฐ์์ฒญ์ ์คํ์์ ๋ถ๋ถ์ด๋ค. ์์ํ๋ ์คํ์์์ ๋ฐ๋ผ ์คํ์ด๋์ง์์ ์ฌ์ฉ์ ์ธ๊ฐ๊ฐ ์ ๋ณด๊ฐ ํ์ํ ํ์ด์ง (ex ๋ง์ดํ์ด์ง)์์ ์๋ก๊ณ ์นจ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค์ง ๋ชปํ๋ ์ด์๊ฐ ์์๋ค. ํ๋ก์ ํธ๊ฐ ๋๋ ๋ ๊น์ง๋ ํด๊ฒฐ์ด๋์ง ์์ ์์๋ฐฉํธ์ผ๋ก ํด๊ฒฐํด๋๊ณ , ์ดํ ๋ฆฌํฉํ ๋ง์ ํ๋ฉด์๋ ๊ทธ ์ด์์ ๋ํด ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์ฐพ์๋ณด๊ณ ์ ์ฉํด๋ณด์์ง๋ง ์ฝ๊ฒ ํด๊ฒฐ์ด ๋์ง ์์๋ค. ํ์ ์ด ๋๋๊ณ ์ฝ 1๋ฌ์ด ์ง๋๋ฌด๋ ต.. ๊ฐ์ด ๊ฐ๋ฐํ๋ ์ฐ๋ฆฌํ ์์ง๋ํ๊ณ ๋์ค์ฝ๋๋ก ๊ทผํฉ์ฃผ๊ณ ๋ฐ๋ค๊ฐ ๊ทธ ์ด์์ ๋ํด ์๊ธฐํ๊ฒ๋์๊ณ ๊ทธ๋ ๊ทธ ๋ฌธ์ ๋ฅผ digginggํ๋ค๊ฐ ๋๋์ด...!!! ์๋ฒฝ 3์๊ฐ ๋์ด์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค. ๐ญ ์ ๋ง ... ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ u..