๋ฌธ์ ํธ๋ฆฌ๊ตฌ์กฐ ๋ฐ์ดํฐ interface Data { id: string; children: Data[]; } export const data: Data = { id: "์์1", children: [ { id: "ํ์1", children: [ { id: "ํ์1-1", children: [{ id: "ํ์1-1-1", children: [] }] }, { id: "ํ์1-2", children: [] }, ], }, { id: "ํ์2", children: [] }, ], }; ํ์ฌ ํด๋ฆญํ๋ ์์ดํ
์ id๋ ์ํ๊ฐ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ค. ํด๋น ์์ดํ
์ ๋๋ฅด๋ฉด id ์ํ๊ฐ์ด ๋ฐ๋ก ๋ณ๊ฒฝ๋๋ค. const [currentId, setCurrentId] = useState(data.id); ๊ทธ ๋ณ๊ฒฝ๋ id๋ฅผ ๊ฐ์ง๊ณ ..
์ด์์ฌํญ postTokenQuery(token) .then((res) => { console.log(res, '์ฟผ๋ฆฌ res'); if (res.data) { setTokenInStorage(token); } }) .catch(() => toast.error('ํ ํฐ ์๋ฌ ๋ฐ์')); //์๋ฒ ์๋ต ์คํจ์ ์คํ ์๋จ rtk query ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด์ ์๋ฒ์ ํต์ ํ๋๋ฐ ์๋ฒ์์ ๋ณด๋ด์ฃผ๋ ์๋ต์ ๋ฐ๋ผ ์ฑ๊ณตํ๋ฉด? .then ์ผ๋ก ํน์ ๋ก์ง์ ์คํํ๊ณ ์คํจํ๋ฉด? .catch ๋ก ํ ์คํธ๋ฅผ ๋์ฐ๋ ๋ก์ง์ด๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฒ์ ์๋ต์ ์คํจํด๋, catch ๋ฌธ์ผ๋ก ๋์ด๊ฐ์ง ์๊ณ , then์์ ๊ฑธ๋ ค res ์๋ต์ ์ฝ์์ ๋์ฐ๋ ์ด์ํ ์ ์ด ๋ฐ๊ฒฌ๋์๋ค. ์ฑ๊ณต์ {data: {โฆ}} ๊ฐ ์ฝ์์ ์ฐํ๊ณ , ์คํจ์ {error: ..
ํด๋ผ์ด์ธํธ ๋จ์์ http ๋น๋๊ธฐ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก axios๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์๋ฒ์ ์์ฒญํ๋๋ฐ ์๊พธ ์๋ฒ์์ ์๋ฌ๊ฐ ๋ฌ๋ค. API ์์ฒญ ํ์์ ์๋์ ๊ฐ๋ค. ์์ฒญ ๋ฉ์๋๋ POST ์์ฒญ ๋ฐ๋๋ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ ๋ฃ์ง ์์์ผํจ ์์ฒญ ํค๋์ ์์ฒญ ํ๋ผ๋ฉํฐ ๊ฐ์ผ๋ก๋ง ์๋ฒ์ ์์ฒญ ๋คํธ์ํฌ ํญ์์ ํ์ธํด๋ณด๋, ํค๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ์์ฒญ์ด๊ฐ์ง ์๊ณ , payload ๋ฐ๋์ ํค๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ์ด์ค ๊ฐ์ฒด๊ฐ ์์ฒญ ๋ฐ๋๋ก ๋ณด๋ด์ ธ์ ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ผ๋ก ํ์ธ์ด ๋์๋ค. ๊ธฐ์กด ์ฝ๋ axios.post( 'url', { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, params: { transactionId, email, pageUri: 'http://192..
์๋ก ์ ๋ง ๋ช๋ ๋ฉฐ์น ์ ๋๋ฒ๊น
ํ์ง๋ง ํด๊ฒฐ ์๋๋ ์ด์๊ฐ ์์๋ค... Mui ํ๋ ์์ํฌ ์์ฒด์ ๋ฌธ์ ์ธ๊ฑธ๊น? ํ๊ณ Textfield ์ปดํฌ๋ํธ๋ฅผ ์์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ๊ฐ์์๊ธฐ ์ ๋ง์ง๋ง์ผ๋ก ํ๋ฒ๋ง ๋ ๋๋ฒ๊น
ํด๋ณด์ ํ๋๋ฐ ์ค๋ ์ง์ง ์ด์ด์๊ฒ ์ด์๊ฐ ํด๊ฒฐ๋์๋ค... ๋ด๊ฐ ์ด๊ฒ๋๋ฌธ์ ๋ช์ผ์ ๊ณ ์ํ๋ค๊ณ .... ๐ญ ์ฌ๋ด ํ๋ก์ ํธ๋ ๋ฆฌ์กํธ ui ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก MUI๋ฅผ ์ฌ์ฉํ๋ค. MUI ๊ณต์๋ฌธ์์์ ํํ๋์ด์๋๋๋ก, ์ธํ๋ฐ์ค๋ฅผ Textfield ์ปดํฌ๋ํธ๋ก ํํํ๊ณ , input ๋ฐ์ค ์ค๋ฅธ์ชฝ ๋์์๋ x ๋ฒํผ์ InputProps์ endAdornment ์์ฑ์ผ๋ก ๊ฐ์ธ์ฃผ์ด ๊ตฌ์กฐ๋ฅผ ์ก์๋ค. 0 && isNameFocused && ( )} ) }} /> Expected Behaviour ์ธํ๋ฐ์ค๋ฅผ ๋๋ฅด๋ฉด focus ์ฒ๋ฆฌ๋..
์ํฉ ๋ง์ดํ์ด์ง๋ฅผ ๊ฐ๋ฐํ๋๋ฐ ์ด์ ํ์ด์ง๊ฐ ์ด๋ ํ์ด์ง์์ ์ง์
ํ๋๋์ ๋ฐ๋ผ ๋ณด์ฌ์ค์ผํ ์ปดํฌ๋ํธ ํ๋๊ฐ ์ฐจ์ด๊ฐ ๋ฌ๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์ฐ์ ์ฝ๋๊ฐ ๊ฒน์น์ง๋ง ๋ง์ดํ์ด์ง์ ํด๋นํ๋ ํ์ด์ง๋ฅผ ๋ ๊ฐ๋ฅผ ๋ง๋ค์๋ค. ๋ก์ง์ ๋๊ฐ์ง๋ง ์ด์ ํ์ด์ง๊ฐ ์ด๋ค ํ์ด์ง์ธ์ง ์ ๋ณด๋ง ์๋ค๋ฉด ๋ง์ดํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ ๋๊ฐ ๋ง๋ค ํ์๊ฐ ์ ํ ์์ด๋ณด์๋ค. ๋ด์ ๋ณด ํ์ด์ง์ ๋ก์ง์ ์๋์ ๊ฐ๋ค. ์ด์ ํ์ด์ง๊ฐ ์์ ์๋ฃ ํ์ด์ง๋ผ๋ฉด? ๋ด์ ๋ณด ํ์ด์ง + ํ ์คํธ ์ปดํฌ๋ํธ ์ด์ ํ์ด์ง๊ฐ ๊ทธ ์ธ์ ํ์ด์ง๋ผ๋ฉด? ๊ทธ๋ฅ ๋ด์ ๋ณด ํ์ด์ง ๋ฌธ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ํ์ด์ง ์ปดํฌ๋ํธ์ Props๋ก ์กฐ๊ฑด์ ๋ด๋ ค์ฃผ์ด ์ํ๋ ์กฐ๊ฑด๋๋ก ๋ค๋ฅธ ๋ ๋ฐฉํฅ์ผ๋ก ๋ฅผ ๋์์ค ์ ์์๊น? ๋ผ๊ณ ์๊ฐ์ ํ์๋๋ฐ, ์ ์ด์ react-router-dom์ useNaviga..
์์ฆ ์ฌ๋ด ํ๋ก์ ํธ์์ ๋ชจ๋ฐ์ผ ํ์ด์ง ์์
์ ํด์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ก ํ์ฌ ๊ฐ๋ฐ์ค์ธ ํ์ด์ง๋ฅผ ๋์์ ํ์ธํ๊ณ ์ถ์๋ค. ์๋ ๋ฐฉ๋ฒ๋๋ก ๊ฐ๋ฐ pc์ ๋ชจ๋ฐ์ผ์ ๋๊ฐ์ wifi ํ๊ฒฝ์ผ๋ก ๋๊ณ , ๋ชจ๋ฐ์ผ์์ ip์ฃผ์:port๋ฒํธ๋ก ์ ์ํ๋๋ฐ, ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ก ๋ก์ปฌ ์๋ฒ ์ ์์ด ์๋๋๊ฒ ..? ๊ณ์ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋๊ณ ๋ชจ๋ฐ์ผ ์ ์์ด ์๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. The URL can't be shown. ์ด๋ผ๋ ๋ฌธ๊ตฌ๋ง ๊ณ์ ๋์ด.. ์-์ ์ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์๋ ๋ฌธ์ ์์ด ์ ๋จ๋๊ฒ... ์ ์๋ฐ๊น? ์๊ฐ์ ํ๋ค๊ฐ ์ง๊ธ ํ๋ก์ ํธ์ ๋ฒ๋ค๋ฌ๋ Vite์ด๋ฏ๋ก Vite์ ๋ฌธ์ ์ธ๊ฑธ๊น? ํ๊ณ ์ฐพ์์ ํด๊ฒฐ ํ ์ ์์๋ค. npm run dev ๋ช
๋ น์ด๋ก ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ธ๋ vite ์ ๊ธฐ๋ณธ ํธ์คํธ๋ localhost, ๊ธฐ๋ณธ ํฌํธ๋ 5173์ผ..
flex container ์์ ์๋ ์์์์๋ค ์ค์์ ํ ์์ดํ
๋ง ๋ฐ๋ก ์ ๋ ฌํ๊ณ ์ถ์ ๋ css์ margin ์์ฑ์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ์ง ์๊ณ ์์ฝ๊ฒ ์์ดํ
์ ์ ๋ ฌํ ์ ์๋ค. ์์ ์ ๋๋ ์ด flex container์์ ๋๋์ด์ง ๋ ๋ถ๋ถ์ ์๊ฐํด์ 2๊ฐ์ container๋ฅผ ๋ ๋ง๋ค๊ณ , ๊ทธ 2๊ฐ์ ์ปจํ
์ด๋๋ฅผ space-between ์์ฑ์ ์ฃผ์ด ์ฌ์ด ๊ณต๊ฐ์ ๋์ด์ฃผ๋ ์์ผ๋ก ๊ฐ๋ฐํ์๋ค. ๐ฅฒ ๊ทธ๋ฐ๋ฐ ์๋ฌด๋๋ ์ด ๋ฐฉ๋ฒ์ด ๋๋ฌด๋๋ ๋นํจ์จ์ ์ธ๊ฑฐ ๊ฐ์ ์ฐพ์๋ณด๋ ์ด๋ฐ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์๋ค. flex container์์ ์์์ค์์ ์ ๋ ฌ๋๊ณ ์ถ์ ๋ถ๋ถ์ ๋ฐ๋ ์์ฑ์ margin ๊ฐ์ auto๋ก ์ค๋ค. ์ด ์์ ์์ ๋ฐ์ ๋ฑ๋ถ์ฌ์ ์ ๋ ฌ์ํค๊ณ ์ถ์ผ๋ฏ๋ก margin-top ์์ฑ auto ๋ฅผ ์ฃผ๋ฉด ๋ง๋ฒ๊ฐ์ด ์ปจํ
์ด๋์ ์๋๋ถ..
๋ฐ์ด๋๋ฆฌ ํ์
์ ํ์ผ ์๋ต ๋ชจํนํ๊ธฐ ์ง๊ธ ์ฌ๋ด ํ๋ก์ ํธ๋ ๋ฐฑ์๋ api์ ํ๋ฐํธ ๊ฐ๋ฐ์ ๋์์ ๋ณํ์ ์ผ๋ก ์งํํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์๋ฒ๋จ API๊ฐ ์์ฑ๋๊ณ ๋ฐฐํฌ๋๊ธฐ ์ด์ ์๋ msw๋ผ๋ ์๋ฒ API ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ค์ ๋ฐฑ์๋ api ์์ด๋ ํ๋ฐํธ๋จ์์ mock ์๋ฒ๋ฅผ ๊ตฌํํด์ ๊ฐ์ง๋ก ๋คํธ์ํฌ ํต์ ์ ํ ์ ์๋ค. json ํ์์ผ๋ก ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฑด ๊ณต์๋ฌธ์์๋ ์ ๋์์์ด์ Mocking์ ํ์๋๋ฐ, ์ด๋ฒ์ ๋ฐ์ด๋๋ฆฌ ํ์
์ ์ด๋ฏธ์ง ํ์ผ์ get ํด์ค๋ ๋ถ๋ถ์์ ๋ชฉ์๋ฒ๋ฅผ ๊ตฌํํ๋๋ฐ ํฐ ๋๊ด์ด ์์๋ค. ์๋ต ์์ ํ๋ฐํธ์์ ์ด๋ฏธ์ง ํ์ผ์ get ํด์ฌ๋ ์๋ฒ์์ ์ฃผ๋ ์๋ต์ ์๋์ ๊ฐ๋ค. ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ฆ, ์๋ฒ์์๋ ์ด ๋ฉํฐ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ 0๊ณผ 1 ๊ฐ๋ง ์กด์ฌํ๋ ์ด์ง ๋ฐ์ดํฐ๋ก ์๋ตํด์ฃผ๋ ..
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..
'React' ์นดํ
๊ณ ๋ฆฌ์ ๊ธ ๋ชฉ๋ก (3 Page)
๋จ์ถํค
๋ด ๋ธ๋ก๊ทธ
๋ด ๋ธ๋ก๊ทธ - ๊ด๋ฆฌ์ ํ ์ ํ |
Q
Q
|
์ ๊ธ ์ฐ๊ธฐ |
W
W
|
๋ธ๋ก๊ทธ ๊ฒ์๊ธ
๊ธ ์์ (๊ถํ ์๋ ๊ฒฝ์ฐ) |
E
E
|
๋๊ธ ์์ญ์ผ๋ก ์ด๋ |
C
C
|
๋ชจ๋ ์์ญ
์ด ํ์ด์ง์ URL ๋ณต์ฌ |
S
S
|
๋งจ ์๋ก ์ด๋ |
T
T
|
ํฐ์คํ ๋ฆฌ ํ ์ด๋ |
H
H
|
๋จ์ถํค ์๋ด |
Shift + /
โง + /
|
* ๋จ์ถํค๋ ํ๊ธ/์๋ฌธ ๋์๋ฌธ์๋ก ์ด์ฉ ๊ฐ๋ฅํ๋ฉฐ, ํฐ์คํ ๋ฆฌ ๊ธฐ๋ณธ ๋๋ฉ์ธ์์๋ง ๋์ํฉ๋๋ค.