π€ μμ§log π€
[REACT] SPA μ async λ³Έλ¬Έ
SPA ( Single Page Application )
- μ΅μ΄ νλ² νμ΄μ§ μ 체λ₯Ό λ‘λ©ν μ΄ν λΆν°λ λ°μ΄ν°λ§ λ³κ²½νμ¬ μ¬μ©ν μ μλ μΉ μ΄ν리μΌμ΄μ μ λ»νλ€.
π£ κΈ°μ‘΄ μΉ νμ΄μ§
μμλ μ¬μ©μκ° λ€λ₯Έ νμ΄μ§λ‘ μ΄λν λ λ§λ€ μλ‘μ΄ HTMLμ λ°μμ€κ³ νμ΄μ§λ₯Ό λ‘λ©ν λ λ§λ€ μλ²μμ 리μμ€λ₯Ό μ λ¬ λ°μμ ν΄μν λ€ νλ©΄μ 보μ¬μ€¬λ€.
λ°λΌμ μλ²κ° ν μΌμ΄ λ§μκΈ° λλ¬Έμ, μ±λ₯μμ λ¬Έμ κ° λ°μν μ μμλ€. μλ² νΈλν½μ΄ λ§μ΄ λμ¬ μλ μκ³ λ§μ μ¬μ©μκ° λͺ°λ¦¬λ©΄ κ³ΌλΆνκ° κ±Έλ €μ μλ²κ° λ€μ΄ λλ λ±μ λ¬Έμ κ° λ°μ κ°λ₯νλ€. μΊμ±κ³Ό μμΆμ ν΅ν΄ μ΄λ μ λ 보μν μ μμ§λ§ μμ¦ μ²λΌ μ¬μ©μμμ μΈν°λμ μ΄ λ§μ νμ΄μ§μ κ²½μ° μ΄ λ°©λ² λν νλ€μ΄μ§λ€.
λν νλ©΄ μ νμ΄ νμν λλ§λ€ μλ‘μ΄ HTMLμ λΆλ¬μ€κΈ° λλ¬Έμ λ°λ νμκ° μλ λΆλΆκΉμ§ μλ‘ λ°μμ λ‘λ©νλ―λ‘ λ§€μ° λΉν¨μ¨μ μ΄λ€.
μ΄λ₯Ό 보μν μ μλ κ²μ΄ SPAμ΄λ€.
π£ SPAμ λ¨μ
Single PageλΌλ μ΄λ¦κ³Ό λ§κ² κ·λͺ¨κ° 컀μ§λ©΄ javascript νμΌμ΄ λ무 컀μ§λ€. νμ΄μ§λ₯Ό λ‘λ©ν λ μ¬μ©μκ° λ°©λ¬Ένμ§ μμ νμ΄μ§λ κ°μ΄ λ λλ§νκΈ° λλ¬Έμ λ‘λ©μκ°μ΄ κΈΈλ€λ μ μ΄λ€. νμ§λ§ μ΄ λ¨μ μ Code Splittingμ ν΅ν΄ ν΄κ²°ν μ μλ€.
μ°Έκ³ : https://velog.io/@apro_xo/SPA
SEO ( Search Engine Optimization )
- μΉμ¬μ΄νΈκ° κ²μ κ²°κ³Όμ λ μ 보μ΄λλ‘ μ΅μ ννλ κ³Όμ μ΄λ€.
π Axios
import { useState } from 'react'
import axios from 'axios' // eslint-disable-next-line
const Axios = () => {
const [data, setData] = useState(null)
π const onClick = () => {
axios
.get('https://jsonplaceholder.typicode.com/todos/1')
.then((response) => {
setData(response.data)
}).error(() => )
} // λΉλκΈ° ν¨μμμ μλ¬κ° λ λ .then λ€μ .error ν¨μ μ μ΄μ£ΌκΈ° π
return (
<div>
<div>
<button onClick={onClick}>λΆλ¬μ€κΈ°</button>
</div>
{data && (
<textarea
rows={7}
value={JSON.stringify(data, null, 2)}
readOnly={true}
/>
)}
</div>
)
}
export default Axios
π async
import { useState } from 'react'
import axios from 'axios' // eslint-disable-next-line
const Axios = () => {
const [data, setData] = useState(null)
π const onClick = async () => {
try {
const response = await axios.get(
'https://jsonplaceholder.typicode.com/todos/1',
)
setData(response.data)
} catch (e) {
console.log(e)
} // asyncμμλ try, catchλ₯Ό μ΄μ©ν΄ tryμμ μλ¬κ° λλ©΄ catchμμ μλ €μ€
} π
return (
<div>
<div>
<button onClick={onClick}>λΆλ¬μ€κΈ°</button>
</div>
{data && (
<textarea
rows={7}
value={JSON.stringify(data, null, 2)}
readOnly={true}
/>
)}
</div>
)
}
export default Axios
'π React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[REACT] HOOK (0) | 2022.10.07 |
---|---|
[REACT] SCSS (0) | 2022.10.06 |
[REACT] useEffectκ° 2λ²μ€νλ λ (0) | 2022.10.06 |
[REACT] To-do List λ§λ€κΈ° (0) | 2022.10.06 |
[REACT] Pagination κ³Ό Querystring (0) | 2022.10.06 |