๊ตฌ๊ธ์ node.js๋ฅผ ๊ฒ์ ํ lts๋ฒ์ ์ ์ค์นํ๋ค์ค์น๊ฒฝ๋ก๋ C๋๋ฆฌ์ด๋ธ๋ก (์๋ฐ๊พธ๋ฉด ๋จ)์ค์น ์ค chocolatey์ด์ฉ๊ตฌ๋ ์ค์น ์ํด๋ ๋จvscode ์๋ํฐ ์window : ์์ ์ฉ ํด๋๋ฅผ ๋ง๋ค๊ณ shift+์ฐํด๋ฆญํด์ powershell์ด๊ธฐ macOS : ์๊ฐ๋ฝ ๋๊ฐ
jsx๋ก html์ ์งค๋๋ class=""๊ฐ ์๋ className=""์ผ๋ก ์จ์ผํจ ์๋ฐ์คํฌ๋ฆฝํธ๋ก div์์ ๋ณ์๋ฅผ ๊ฝ์๋ฃ๊ณ ์ถ์๋๋ document.getElementById().innerHTML = ?? ์ด๋ฐ์์ด์ง๋ง ๋ฆฌ์กํธ์์๋ <div>{ ๋ณ์๋ช }</
๊ธ์์ ์ด๋ผ๋ ๋ฒํผ ํด๋ฆญ ์ ์๋ณธ๋ฐ์ดํฐ(๊ธ์ ๋ชฉ)์ 0๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ '์ฌ์ ์ฝํธ ์ถ์ฒ'์ผ๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํจ.์ด๋ ๊ฒ ์๋ณธ๋ฐ์ดํฐ(๊ธ์ ๋ชฉ)๋ฅผ ๊ฐ์ ธ์ ์ง์ ๋ณ๊ฒฝํด์ค ์ ์๊ฒ ์ง๋ง, ์ด๊ฑด ์ข์ ๋ฐฉ์์ด ์๋.์๋ณธ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ง ์๊ณ ๋ณ๊ฒฝํ๋๊ฒ์ด ์ค์ํจ๊ทธ๋์ copy๋ณธ์ ๋ง๋ค์ด copy
๊ธด html,css๋ฅผ ํ ๋จ์ด๋ก ์นํํด์ ์ธ ์ ์๋ ๋ฌธ๋ฒโฒ ์ด๋ฐ์์ผ๋ก ์ฐ๋ฉด ๋จfunction์ ์ด์ฉํด ํจ์๋ฅผ ํ๋ ๋ง๋ค๊ณ ํจ์ ์์ return()์์ ์ถ์ฝ์ ์ํ๋ html ๋ด๊ธฐ (์ฌ๊ธฐ์ return์์์๋ ํ๋์ ํ๊ทธ๋ก๋ง ์จ์ผํจ. ๋๊ฐ ํ๊ทธ ์ฌ์ฉ๋ถ๊ฐ)์ํ๋ ๊ณณ์์
๋์ ์ธ UI๋ ์ ์ ๊ฐ ์กฐ์์ ํํ๊ฐ ๋ฐ๋๋ ๋ชจ๋ฌ์ฐฝ ํญ ์๋ธ๋ฉ๋ด ํดํ ๊ฒฝ๊ณ ๋ฌธ ๋ฑ์ผ UI๋ค์ ์๋ฏธํจ1\. html css๋ก ๋ฏธ๋ฆฌ UI ๋์์ธ ๊ตฌํ2\. UI์ ํ์ฌ ์ํ๋ฅผ state๋ก ์ ์ฅ3\. state์ ๋ฐ๋ผ UI๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์กฐ๊ฑด๋ฌธ ์์ฑํ์์ ์์ : ๋ชจ๋ฌ์ฐฝ ์ํ๋ง
: array ์์ ๋ค์ด์๋ ์๋ฃ ๊ฐฏ์๋งํผ ์ฝ๋๋ฅผ ๋ฐ๋ณต์คํํด์ฃผ๋ ํจ์arrya ์๋ฃ ์ฐ์ธก์ map()ํจ์ ๋ถ์ด๊ธฐresult : console.log(1) 3๋ฒ ์คํ๋จ result : 2, 3, 4๊ฐ ์ฝ์์ฐฝ์ ์ถ๋ ฅ๋จ result : 20, 30, 40์ด ์ฝ์์ฐฝ์ ์ถ๋ ฅ
์์์ปดํฌ๋ํธ์์ ๋ถ๋ชจ์ปดํฌ๋ํธ์ ์๋ state๋ฅผ ์ฐ๊ณ ์ถ์ผ๋ฉด props๋ก ์ ์กํด์ ์จ์ผ ํจ<์์์ปดํฌ๋ํธ ์๋ช = { state์ด๋ฆ }>์์ ์ปดํฌ๋ํธ์์ props ํ๋ผ๋ฏธํฐ ๋ฑ๋ก ํ props.์๋ช ์ฌ์ฉModal component์์ ์ธ๋ถ์ state ์ง์ด๋ฃ๊ธฐ
<input type = "text" /><input type = "range" /><input type = "checkbox /"><input type = "date" /><select></select><textarea></
์ง์ html์ ๋ฃ์ด ์์ฒญํ ํ์ x html์ ์ด๋ฏธ ๋ง๋ค์ด๋ state๋ง ๊ฑด๋ค๋ฉด ๋ง๋ค์ด์ง ๋ฏ?unshift()๋ array์๋ฃํ ์ ์ผ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋ ์ฌ์ฉโ ๊ธ์ฐ๋ค๊ฐ ์๊ฐ๋ฌ๋๋ฐ e.stopPropagation๋ ๋๋?pํ๊ทธ์์ ์ถ๊ฐํ๋๋ฐ ๊ทธ๋ฅ ์ธํฐ๋ท๋ณด๊ณ ํ์..
์๋ฒ์์ ๊ฐ์ ๋ฐ์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉํ๋๊ฑธ ํ๊ณ ์ถ์๋ฐ, ์๋ฒ๊ฐ ์์ผ๋ ... ๋ฆฌ์ํธ๋ถํธ์คํธ๋ฉ์ ์ด์ฉํ์ฌ html,css๋ฅผ ์ง๊ณ , ์๋ฒ์์ ๊ฐ์ ๋ฐ์์ค๋ ๊ฒ์ฒ๋ผ ํ๊ธฐ ์ํด data.jsํ์ผ์ objectํ์์ ๋ฐ์ดํฐ๊ฐ์ ์ ์ฅํ์export ๋ฌธ๋ฒ 1 : export def
๋ฆฌ์ํธ๋ spa(single page application)์ด๋ผ ํ๋์ htmlํ์ผ๋ง์ ์ฌ์ฉํ๋ค๊ณ ์๊ณ ์๋ค.๊ทธ๋์ ์ฌ์ฉ์๊ฐ ๊ฐ๊ฐ์ ๋ค๋ฅธ ํ์ด์ง๋ค์ ์์ฒญํ๊ฒ ๋๋ฉด ๋ด๋ถ์ <div>๋ฅผ ๊ฐ์์น์ ๋ณด์ฌ์ฃผ๋ฉด ๋จ(์ปดํฌ๋ํธ์ฌ์ฉ, ๋ชจ๋ํ)์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ react-router
ํน์ component์ urlParams๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๋ก ๋์ ์ธ ํ์ด์ง ๊ตฌํํด ๋ณด๋ ค๊ณ ํ๋ค. ์ฐ์ app.js์์ <Detail>component๋ฅผ ์ฌ์ฉํ๋๊ณณ์ shoes๋ผ๋ props๋ฅผ ์ ์กํ๋ค. Detail ์ปดํฌ๋ํธ๋ propsํ๋ผ๋ฏธํฐ๋ฅผ ๋ฑ๋กํด์
npm install styled-componentsimport styled from 'styled-componentsstyled-components๋ฅผ ์ด์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ์คํ์ผ์ ๋ฏธ๋ฆฌ ์ฃผ์ ํด์ ๋ง๋ค ์ ์์.์์๋ก padding:20px์ธ div๋ฐ์ค๋ฅผ sty
Detailํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด alert๊ฐ ๋จ๊ณ ,2์ด ํ ๋ฐ์ค๋ฅผ ์ฌ๋ผ์ง๊ฒ ํด๋ณด๊ฒ ์๋์ ์ธ ui๋ฅผ ๋ง๋ค๋,1\. ui์ํ๋ฅผ ์ ์ฅํ state ์์ฑ2\. state์ ๋ฐ๋ผ ui๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์์ฑstate๋ฅผ ์์ฑํด์ ๊ธฐ๋ณธ๊ฐ์ true๋ก ๋์์.๊ทธ๋ฆฌ๊ณ 3ํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์
๋์ ์ธ ui๋ง๋๋๋ฒ. ์ด๊ฑฐ ์งฑ ์ค์ํจ ์ง์ง์. ์!!!!!!!!!!!! ์ง์ง ํ!! ์ด๊ฑฐ ์๋ณด๋ฉด ์ง์ง ํํํจ!!!!!!
์๊ณ ์๊ณ ๋ญ๊น? ๊ถ๊ธํ์ง ์์?
๊ถ๊ธ์ฆ ํด๊ฒฐ.
redux๋ props์์ด state๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ฑธ ์ค์นํ๋ฉด jsํ์ผ ํ๋์ state๋ค์ ๋ณด๊ดํ ์ ์๋๋ฐ ๊ทธ๊ฑธ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ง์ ๊บผ๋ด์ธ ์ ์์.๊ทธ๋์ ๊ท์ฐฎ๊ฒ props์ ์ก์ด ํ์ ์์ด์ง.๐ก ์ค์นํ๊ธฐ ์ ์ package.json์์
์ด์ ํฌ์คํ ๐คRedux 1 : Redux Toolkit ์ค์น์ ํฌ์คํ ์์ ๋ง๋ค์ด ๋ store.jsํ์ผ ์์ state๋ฅผ ํ๋ ๋ง๋ค์ด๋ณด์!step 1. createSlice()๋ก state ์์ฑstep 2. configureStore()์์ ๋ฑ๋กcreateSlice
์ด์ ํฌ์คํ ๐ค1\. Redux 1 : Redux Toolkit ์ค์น2\. Redux 2 : store์ state ๋ณด๊ดํ๊ณ ์ฌ์ฉํ๊ธฐRedux์ state๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์์.1\. store.js์ state ๋ณ๊ฒฝํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ 2\. exprot3\.
์ด์ ํฌ์คํ ๐ค1\. Redux 1 : Redux Toolkit ์ค์น2\. Redux 2 : store์ state ๋ณด๊ดํ๊ณ ์ฌ์ฉํ๊ธฐ3\. Redux 3 : store์ state ๋ณ๊ฒฝํ๋ ๋ฒ๋์ถฉ {name : 'kim', age : 20} ์ด๋ ๊ฒ ์๊ธด ์๋ฃ๋ฅผ sta
์ด์บํ๋์ง ๊ถ๊ธํ์ง ์์?
react์์ ์์ฃผ์ฐ๋ if ์์ฑ ํจํด 5๊ฐ์ง๋ ๋ญ๊ฐ ์์๊น? ์ผํญ์ฐ์ฐ์๋ถํฐ switch๊น์ง. ๋ค์ํ 5๊ฐ์ง ์กฐ๊ฑด๋ฌธ ํจํด
์ฌ์ฉ์ ๋ชฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ localStorage ์ถ๊ฐ๋ก sessionSorage๊น์ง~
reactquery๊ถ๊ธํ์ง ์์ผ์ญ๋๊น? ํํ ..
์ฑ๋ฅ๊ฐ์ ์ ์ํ 3๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ ค๊ณ ํ๋ค. ๊ฐ๋ฐ ์ค ๋ฒ๊ทธ๊ฐ ์๊ธธ๋ ๊ฐ๋ฐ์๋๊ตฌ์์ elements๋ฅผ ๋ด๋ ๋์ง๋ง ๋ฆฌ์กํธ๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํ์ฅํ๋ก๊ทธ๋จ์ ์ค์นํด์ ๋ณด๋ฉด ๋ ํธํจReact Developer Tools๋ฅผ ์ค์นํ๊ณ ๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ์ด์ด๋ณด๋ฉด Componentsํญ๊ณผ
Progressive Web App์ด๋ผ๋๊ฒ ์๋๋ฐ ์น์ฌ์ดํธ๋ฅผ ์๋๋ก์ด๋/ios๋ชจ๋ฐ์ผ ์ฑ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋๋ ์ผ์ข ์ ์น๊ฐ๋ฐ ๊ธฐ์ ์๋ ์์ธํ ๋งํ๋ฉด ios, android์ฑ์ผ๋ก ๋ฐํํ๋๊ฒ ์๋ ์น์ฌ์ดํธ ์์ฒด๋ฅผ ์ค๋งํธํฐ ํํ๋ฉด์ ์ค์นํ๋๊ฒ์์ ์ฌ์ง์ฒ๋ผ ์ค์น๋ ์ฑ์ ๋
js๋ ์ผ๋ฐ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด synchronousํ๊ฒ ์ฒ๋ฆฌ๋จ.๋ญ์๋ฆฌ๋๋ฉด ์ฝ๋๋ฅผ ์ ์ ์์๋๋ก ์์ค๋ถํฐ ์ฐจ๋ก๋ก ์ฝ๋๊ฐ ์คํ๋๋ค๋ ๋ป์์๋ฅผ ๋ค์ด์ด๋ฐ ์ฝ๋๋ ์์์ ๋ถํฐ ์์๋๋ก ์คํ๋๋ฏ๋ก ์ฝ์์ฐฝ์ 2, 3, 4๊ฐ ์์๋๋ก ์ถ๋ ฅ๋จ๊ทผ๋ฐ ajax, ์ด๋ฒคํธ๋ฆฌ์คํฐ, setTim
useEffect(() => { fetchMoviesHandler(); }, fetchMoviesHandler);์ด ๋ถ๋ถ์ ์ ์๋์ฒ๋ผ ํ๋ฉด ์๋๋์ด์ useEffect(fetchMoviesHandler(), fetchMoviesHandler);useEffect์
๋ฆฌ์ํธ์์ ์ต์ปคํ๊ทธ ๋์ ์ฌ์ฉ๊ฐ๋ฅํ Linkํ๊ทธ๊ฐ ์์aํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด http์์ฒญ์ผ๋ก์ธํด url์ด ๋ณ๊ฒฝ๋๋ฉด์ ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ๋๋ฐ ๋ฆฌ์ํธ๋ผ์ฐํฐ๋์์ ์ ๊ณตํ๋ Link component๋ฅผ ์ฌ์ฉํ๋ฉด http์์ฒญ์์ด ๋ผ์ฐํ ์ด ๊ฐ๋ฅํจ์ด๋ฐ์์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ฐ ์ด์ ๊ฒฝ๋ก๋ก ์ด๋ํ
return ์์จ์ค์ ๋ง์ฝ map์ ์ฌ์ฉํ๋ค๋ฉด map์ return ์ด ํ์ํจ map(()=>{return ... })์ผ์ผ์ฐ๋์ง map(()=>()); ์๊ดํธ ์ฐ๋์ง..
https://victory-ju.tistory.com/entry/React-Module-not-found-Error-Cant-resolve-In-%EC%98%A4%EB%A5%98-TypeScript-React
https://velog.io/@daeseongkim/Redux%EC%9D%98-3%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99
https://maxkim-j.github.io/posts/js-pure-function/
https://itchallenger.tistory.com/683
์ ์ฝ๋์์ ๋ํดํธ๋ก ์๊ฒฐ์ ์ฒดํฌํ๊ณ ์ถ์๋๋ฐ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.react-dom.development.js:86 Warning: You provided a checked prop to a form field without an onChange handler.
styled component๋ฅผ ์ฌ์ฉํ ๋ props๋ฅผ ๋ณด๋ผ ๋ ๊ฐ๋consider using transient props (\`$\` prefix for automatic filtering.) ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐย ์๋ฌ ๊ทธ๋๋ก ๋ณด๋ด๋ props์์ '$'๋ฅผ ๋ถ์ด์ฃผ๋ฉด