[ν΄λΌμ°λ© μ΄ν리μΌμ΄μ μμ§λμ΄λ§ TIL] 240119 - κ³ μμ΄ μ¬μ§ κ²μ μ€μ΅ 3
Intro
μ€λμ κ³ μμ΄ μ¬μ§ κ²μ μ€μ΅μ λν κ°λ¨ν 리ν©ν λ§μ νμ΅νλ€.
λͺ¨μ ν μ€νΈλ₯Ό νλΌκ³ νλλ° κ°μλ₯Ό λ€ λ€μ΄μΌ ν μ μμ κ² κ°μμ κ³μ λ―Έλ£¨κ³ μλ μ€μ΄λ€ γ ,,,
μ€λ νμ΅ν λ΄μ©
: api, λͺ¨λν, κΈ°ν 리ν©ν λ§
π©π» async-await λμ
API fetch μ½λλ₯Ό async , await λ¬Έμ μ΄μ©νμ¬ μμ ν΄μ£ΌμΈμ. ν΄λΉ μ½λλ€μ μλ¬κ° λ¬μ κ²½μ°λ₯Ό λλΉν΄μ μ μ ν μ²λ¦¬κ° λμ΄μμ΄μΌ ν©λλ€.
π©π» api μμ² κ²°κ³Ό μ²λ¦¬
API μ status code μ λ°λΌ μλ¬ λ©μμ§λ₯Ό λΆλ¦¬νμ¬ μμ±ν΄μΌ ν©λλ€.
async-await
κΈ°μ‘΄ μ½λμμ api νΈμΆ μμ μλ°μ€ν¬λ¦½νΈμ fetch-thenμ ν΅ν΄ apiλ₯Ό νΈμΆνμλλ° fetch-thenλ³΄λ€ κ°λ μ±μ΄ μ’μ async-await λ¬Έλ²μ μ΄μ©ν΄ μ½λλ₯Ό κ°μ νμλ€.
- fetch-then
const result = () => {
return fetch(url).then((res) => res.json());
}
- async-await
const request = async url => {
return await fetch(url);
}
μΆκ°λ‘, try-catchλ¬Έμ μ¬μ©ν΄ μλ¬ νΈλ€λ§μ νμλ€.
const request = async (url) => {
try {
const result = await fetch(url);
if (result.status === 200) {
return result.json();
} else throw REQUEST_ERROR[result.status];
} catch (err) {
alert(err.msg);
return { data: null };
}
};
π©π» ES6, import, export
ES6 module ννλ‘ μ½λλ₯Ό λ³κ²½ν©λλ€. webpack , parcel κ³Ό κ°μ λ²λ€λ¬λ₯Ό μ¬μ©νμ§ λ§μμ£ΌμΈμ. ν΄λΉ μ½λ μ€νμ μν΄μλ http-server λͺ¨λμ(λ‘컬 μλ²λ₯Ό λμ°λ λ€λ₯Έ λͺ¨λλ μ¬μ© κ°λ₯) ν΅ν΄ index.html μ λμμΌ ν©λλ€.
import/export
<body>
<div id="App"></div>
<script src="src/utils/validator.js"></script>
<script src="src/api.js"></script>
<script src="src/ImageInfo.js"></script>
<script src="src/SearchInput.js"></script>
<script src="src/DarkModeToggle.js"></script>
<script src="src/Loading.js"></script>
<script src="src/KeywordHistory.js"></script>
<script src="src/SearchResult.js"></script>
<script src="src/App.js"></script>
<script src="src/main.js"></script>
</body>
import/exportλ₯Ό μ¬μ©νμ§ μκ³ μ½λλ₯Ό λΆλ¬μ€κΈ° μν΄μ script νκ·Έλ‘ index.htmlμ νΈμΆνμ΄μΌ νλ€.
<div id="App"></div>
<script type="module" src="src/main.js"></script>
ES6μμ μλ‘κ² λμ λ import/exportλ₯Ό μ¬μ©ν΄ main.jsλ App.jsμ ν΄λμ€ μ»΄ν¬λνΈλ€μ exportνμ¬ μ΅μ’ μ μΌλ‘ index.htmlμλ main.jsλ§ νΈμΆν μ μλλ‘ κ΅¬ννλ€.
μ€μν 건 type="module" μμ±μ κΌ λ£μ΄μ€μΌ νλ€.
- main.js
import App from './App.js';
new App(document.querySelector('#App'));
- App.js
import Loading from './Loading.js';
import DarkModeToggle from './DarkModeToggle.js';
import ImageInfo from './ImageInfo.js';
import SearchInput from './SearchInput.js';
import SearchResult from './SearchResult.js';
import api from './api.js';
class App {
...
}
export default App
κΈ°ν 리ν©ν λ§
μ΅κ·Ό κ²μν ν€μλλ₯Ό SearchInput μλμ νμλλλ‘ λ§λ€κ³ , ν΄λΉ μμμ νμλ νΉμ ν€μλλ₯Ό λλ₯΄λ©΄ κ·Έ ν€μλλ‘ κ²μμ΄ μΌμ΄λλλ‘ λ§λλλ€.
λ¨, κ°μ₯ μ΅κ·Όμ κ²μν 5κ°μ ν€μλλ§ λ ΈμΆλλλ‘ ν©λλ€.
Set
κ³ μ ν κ°μ μ μ₯ν μ μλ μλ£κ΅¬μ‘°μΈ Setμ μ¬μ©νμ¬ μ΅κ·Όμ κ²μν 5κ°μ ν€μλμμ μ€λ³΅λ κ²μμ΄λ₯Ό μ κ±°νλ 리ν©ν λ§μ μ§ννλ€.
Array.from(new Set(list))
new SetμΌλ‘ Set μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄λ₯Ό λ°°μ΄λ‘ λ³ννλ λ©μλμΈ Array.fromμ μ¬μ©ν΄ λ°°μ΄μ λ°ννλ€.
λ§λ¬΄λ¦¬
μ€μ΅μ μ§νν΄λ³΄λ μμΌλ‘ νλ‘μ νΈ ν λ μ΄λ»κ² κ°λ°ν΄μΌ ν μ§ λ°©ν₯μ΄ μ΄λμ λ μ‘νλ κ² κ°λ€.
κ·Έλ¦¬κ³ κ°μμμ κ°μ¬λμ΄ μλ €μ£Όμ μ½λ ꡬννλ λ°©λ²λλ‘ μ½λλ₯Ό μ§€ λ console.logλ₯Ό μ°μ΄λ³΄λ©° λ°μ΄ν°κ° μ λ€μ΄μ€λμ§ νμΈν΄λ³΄λ©΄μ μ½λλ₯Ό μ§λ μ΄λμλΆν° μλͺ»λλμ§ μ€λ₯λ₯Ό ν΄κ²°νλ λ°μ μκ°μ λ¨μΆν μ μμλ€.
