ํฐ์คํ ๋ฆฌ ๋ทฐ
Astronaut
๐๊ณ๊ธฐ
์์ฒญ ๋๋จํ ํ๋ก์ ํธ๋ ์๋๊ณ ... ๊ณต๊ฐํ๊ธฐ๋ ๋ถ๋๋ฝ์ง๋ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋ก์ ํธ์์ ๋ฐฐ์ฐ๊ฑฐ๋ ๋๋ ๊ฒ๋ค์ ์ ๋ฆฌํด์ ์ฌ๋ฆด ๊ณํ. ๊ฐ์ธ์ ์ผ๋ก JS๋ฅผ ๋น ๋ฅด๊ฒ ์ต๋ํ๊ธฐ ์ํด ๋ง๋ ์น์ฑ Toyํ๋ก์ ํธ
์ด์ ์ React๋ฅผ ํ์ฉํ ํ๋ก์ ํธ๋ค์ ์ธํด ๋ ์ฒ์ ๊ฒฝํํ๋ค. ํ์ง๋ง JS์ ๋ํ ํ์ต๋ ์์ด React๋ฅผ ๋จผ์ ํ์ตํ๋ค. ๋ฌด์์ ๋ถ๋ชํ๋ฉด์ ๋ฐฐ์ฐ๋ค ๋ณด๋ ๊ธฐ๋ณธ์ ์ธ UI๋ ant-design, bootstrap์์ ๊ฐ์ ธ์ ์ง๊น๊ธฐํ ์ ์์๋ค. ํ์ง๋ง JS๋ฅผ ์ ๋๋ก ๊ณต๋ถํ์ง ์์ ์ํ์์ ์น ํ์ด์ง๋ฅผ UI๋ง ๊ตฌ์ฑํ๋ค๋ ๊ฒ์ ํฐ ์๋ฏธ๊ฐ ์์๋ค. ๊ทธ๋์ ๋ค์ JS๋ฅผ ๊ณต๋ถํ๋ค. React๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก JS์ ๋ํด ๋ง์ ์ดํด๊ฐ ํ์ํ๋ค. ๊ทธ๋์ ๋์ Astronaut ํ๋ก์ ํธ๋ฅผ ํตํด ์น ์ฑ์ ๋ง๋๋๋ฐ ํ์ํ ๊ธฐ๋ฅ๋ค์ ํ์ตํ๋ค. ๊ฐ๋จํ JS ํ๋ก์ ํธ์ง๋ง, React๊ฐ UI ๊ตฌ์ฑ์ ์ ๋ง ํธํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค.. ๋ํ JS์ ๋์์๋ฆฌ๋ ์ด๋ฒคํธ ๋ฃจํ๋ ๋ฌด์์ธ์ง ๊ณต๋ถํ ์ ์๋ ๊ณ๊ธฐ๊ฐ ๋๋ค.
React๋ฅผ ์ฌ์ฉํ๋ ์ด์ . Reference์ ๋ ์์ธํ ์ค๋ช ๋์ด ์๋ ๋งํฌ๊ฐ ์๋ค.
โก ์๋ ๊ธฐ๋ฅ๋ค์ github์ ์ค๋ช ํด๋จ์ง๋ง ์กฐ๊ธ ๋ ๊ตฌ์ฒด์ ์ธ ํ๋ก์ ํธ ๊ธฐ๋ฅ ๋ด์ฉ
1. ์ฌ์ฉ์์ ๋ก๊ทธ์ธ์ ๋ด๋นํ๋ loginForm์ ์ด์ฉํ ๋, submit์ ์์ฒญํ๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ userName์ ๋ฐ์์ ๋ , ์๋ก๊ณ ์นจ์ด ๋๊ธธ ์ํ์ง ์๋๋ค.
function onLoginSubmit(e) {
e.preventDefault();
const userName = loginInput.value;
console.log(userName);
}
//e.preventDefault()๋ฅผ ํ์ฉํด์ ์๋ก๊ณ ์นจ์ ๋ง์๋ค.
2. .hidden
์ด๋ผ๋ display:none
์์ฑ์ ๊ฐ์ง ํด๋์ค๋ฅผ ๋ง๋ค์ด์ login-form์์ submit์ ํด์คฌ์ ๋, ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ ๋ค์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด .hidden
ํด๋์ค๋ฅผ ์์ ์คฌ๋ค. ๋ํ user์ ์ด๋ฆ์ ๊ธฐ์ตํ๊ฒ ํ๊ธฐ ์ํด์ local-storage์ ์ ์ฅํ๋ค. ์๋์ ๊ฐ์ด ์์ฑํด์คฌ๋ค. ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ USERNAME_KEY๊ฐ ์กด์ฌํ๋ค๋ฉด ์ ์ ๋ค์ ์
๋ ฅ๋ฐ๋ loginForm์ ๊ฐ์ถ๋ค.
function greeting(username) {
greet.innerText = `Hello Astronaut ${username}.`;
greet.classList.remove(HIDDEN_CLASSNAME);
}
const isUserNameSaved = localStorage.getItem(USERNAME_KEY);
if (isUserNameSaved === null) {
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener('submit', onLoginSubmit);
} else {
gretting(isUserNameSaved);
}
3. ์๊ณ๋ฅผ ํํํ ๋ ๋ด์ฅ ํจ์์ธ padStart(2,'0')
๋ฅผ ์ด์ฉํด์ "00:00:00" ํฌ๋งท์ ๋ง๋ค์๋ค. ์ฆ, ๋ฌธ์์ด์ ๊ธธ์ด๋ 2
๋ฅผ ๊ฐ์ง๊ณ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 2
๋ณด๋ค ์์ผ๋ฉด 0
์ ๋ฌธ์์ด ์์ ๋ถ๋ถ์ ์ฑ์ ๋ฃ๋๋ค. ์ด๋ฅผ ์ด์ฉํด ์๊ฐ ๊ฐ ํํ์ ์์ฝ๊ฒ ํ ์ ์์๋ค. ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ๋ฌธ์์ด์ ์ด๊ฐ์๋ฅผ ์๋ฏธํ๋ค. ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์ฑ์ธ ๋ฌธ์๋ฅผ ์
๋ ฅ.
a = '83';
console.log( a.padStart(4, '0') );
//์คํ๊ฐ : 0083
function getClock() {
const date = new Date();
const hours = String(date.getHours()).padStart(2, '0');
const min = String(date.getMinutes()).padStart(2, '0');
const sec = String(date.getSeconds()).padStart(2, '0');
const time = `${hours}:${min}:${sec}`;
clock.innerText = time;
}
4. ํ๋ฉด์ ์ถ์์์ผฐ์ ๋ ์ด๋ฏธ์ง ์๋ฆผ ํ์๊ณผ ์ค๋งํธํฐ ๋ฑ์์ ์๋์ ํ์ ๋, UI๊ฐ ๋ถ์์ ํ๋ค. ์๊ฐ๋ณด๋ค CSS ์ค์ ์ด ๊ต์ฅํ ์ด๋ ค์ ๋ค. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ถ๊ธด ํ๋๋ฐ, ํ๋ฉด์ ๊ท๊ฒฉ๋ง๋ค CSS๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด์ด ๋ฌ๋ผ์ ธ๋ ๋๊ฐ์ด ์ ์ฉ์ํฌ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.. (ํ๋ฉด ๊ท๊ฒฉ์ ๋ฐ๋ผ์ px ๋จ์๋ก ๊ณ์ฐ์ ํ๋ ๊ฑด๊ฐ..?) ํ์ฌ ๋ด ์ฝ๋๋ ์ฌ์ดํธ ๊ท๋ชจ๊ฐ ์ปค์ก์ ๋ ์๊ฐํด์ผ ๋ ๋ฌธ์ ๋ ๋ง๊ณ ์์ํ CSS ์ค๋ฅ๊ฐ ๋ง์ด ์๊ธธ ๊ฒ ๊ฐ๋ค. ์ด๋ฐ ๋ถ๋ถ์์ React๊ฐ UI๋ฅผ ๋ง๋ค๊ธฐ ๊ต์ฅํ ์์ฌ์ ๋ ๊ฒ ๊ฐ๋ค. (๋ฏธ๋์ด์ฟผ๋ฆฌ)
const body = document.querySelector('body');
putImg = `img/${chosenImage}`;
body.style.backgroundImage = `url(${putImg})`;
body.style.backgroundSize = '100% 100%';
5. OpenWeather API ํค๋ฅผ ๊ณต๊ฐํด๋ ๋๋๊ฐ?
์ฌ์ค ์์ง๋ ํ๋จ์ด ์ ์ ๋๋ ๋ฌธ์ ์ด๋ค. Open api์ด๊ณ , ํด๋น ์ฌ์ดํธ์์ ๋์ ์ ๋ณด๋ฅผ ์๊ตฌํ ๋ถ๋ถ๋ ๋ง์ง ์๋ค. ๊ทธ๋์ ๊ณต๊ฐ๋ฅผ ํด๋ ์๊ด์ด ์์ง ์๋ ์๊ฐ์ด ๋ ๋ค... ํ์ง๋ง ํ์คํ์ง ์์ ์์ฑํ์ง ์์๋ค.
๋์์?
API ํค๋ ๋ณด์์ ์ ์ ์งํ๋ฉฐ ๊ด๋ฆฌํด์ผ ํ๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ ์ธก์ KEY๋ฅผ ๋ณด๊ดํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์ ํ๋ธ ์๋ฒ๋ก ๋ฐ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก๋ KEY๋ฅผ ์จ๊ธธ ์ ์๋ค. ์์ฒญ URL์ '&key=MY_API_KEY'์ ๊ฐ์ ํํ๋ก ๋ด API ํค๊ฐ ๋ฐ๋์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ๋ ์๋ฐ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก KEY๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด์๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ ๊ณณ์ KEY๋ฅผ ๋ณด๊ดํด์ผ ํ๋ค. ๋์์ ์๋ฒ๋ฅผ ํ๋ ๋๋ ๊ฒ์ด๋ค.
์ด ์ฌ์ดํธ์์ ์ ํ๋ธ api ์ฌ์ฉํ๊ธฐ ์ํด API_KEY๋ฅผ ์จ๊ธฐ๋ ๊ณผ์ ์ด๋ค. ์ดํดํ๋๋ฐ ๋์์ด ๋ง์ด ๋๋ค. ์ ํ๋ธ ์ ์ฉ api ์คํ์์ค๋ผ ๋ด๊ฐ ์์ง ์ฌ์ฉ์ ํ ์ ์๋ค. Express๋ฅผ ํ์ต ์ค์ด๋ผ ์ถํ์ ์ ์คํ์์ค๋ฅผ ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค.
๐ Reference
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Astronaut-shop ์ฝ์ง ๊ฐ๋ฐ์ผ์ง2 (0) | 2021.08.19 |
---|---|
[React] Astronaut-shop ์ฝ์ง ๊ฐ๋ฐ์ผ์ง1 (0) | 2021.08.08 |
- Total
- Today
- Yesterday
- css
- ์๊ณ ๋ฆฌ์ฆ
- html
- c์ธ์ด์๊ณ ๋ฆฌ์ฆ
- ํ๋ก๊ทธ๋๋จธ์ค ์นด์นด์ค
- 42์์ธ
- 42์์ธ ํฉ๊ฒฉ
- windows 10 ubuntu
- ํ๋ก๊ทธ๋๋จธ์ค ์๋ฐ
- JS
- C์ธ์ด๋ฌธ์
- flexbox
- React
- Git
- c์ธ์ด ํจ์
- 42seoul
- vscode commit vi
- ํ๋ก๊ทธ๋๋จธ์ค ์ฝํ
- ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ
- C์ธ์ด
- vscode
- JavaScript
- ๋งํฌ๋ค์ด ์ด๋ฏธ์ง ์ ๋ก๋
- ๋ฐฑ์ค
- ์๋ฐ์คํฌ๋ฆฝํธ
- git vi
- HEXO
- 42์์ธ ํฉ๊ฒฉ ํ๊ธฐ
- 42์์ธ ๋ผํผ์
- C์ธ์ด ๋ฌธ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |