🀍 은지log 🀍

[REACT] SPA 와 async λ³Έλ¬Έ

πŸ’™ React

[REACT] SPA 와 async

Eun_zii 2022. 10. 6. 14:42

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
728x90

'πŸ’™ 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