리액트를 공부하면 할 수록 어렴풋이 알고 지나갔던 것들이 부메랑🪃처럼 되돌아 오고 있다.
그래서 오히려 좋다👍는 마인드로 하나씩 다시 열심히 리마인드를 하고 있다.
오늘의 주제는 Axios다. 프로젝트할 때 axios를 사용해서 json-server에서 db에서 데이터를 가져왔었는데 그 때는 급한마음에 갖다 썼지만 지금은 다음 프로젝트를 위해서 공부했다.
이 때까지 하나씩 야금야금 공부했던 useEffect , async & await , promise.then() 등이 합쳐져서 완성본을 이룬 느낌이다.
axios는 비동기 통신이다. 데이터값이 언제 들어올지 각각 다 다르니까 이렇게 사용한다.
데이터를 가져온다는 예시로 axios.get("localhost:주소")일때 -->await axios.get("localhost:주소")를 사용한다.
await는 주소를 가져올때까지 기다려줘, 즉 이 코드가 실행될때까지 멈춘다라는 기능을 가지고 있다.
그렇게 되면 이 다음 코드들은 무조건 값을 가지게 되는 것이다.(그래서 .then()이라는게 굳이 필요가 없다고 하는 듯)
❓그럼 async + await 코드는 언제 쓸까 : 화면이 렌더링되었을 때
❓그럼 화면이 렌더링 되자마자 어떻게 실행 시킬까 : useEffect(()=>{},[])
//화면이 렌더링될떄 사용
useEffect(()=>{
const fetchData=async()=>{
await axios.get("주소") // 2.데이터를 가져올떄까지 wait
}
fetchData() // 1.실행
},[]) //렌더링될때 한번만 실행
그래서 이 위의 코드로 데이터를 가져와서 state 값을 어떻게 변화 줄까?🧐
//위에꺼 정리해보면
const [todos,setTodos]=useState([])
useEffect(()=>{
const fetchData=async()=>{
const response = await axios.get("주소")
setTodos(response.data) //필요한 배열을 가져와서 setTodo해준다.
}
fetchData()
},[])
reponse.data --> 가져온 데이터들이 담겨있는 배열들
그럼 비동기안의 코드들은 왜 순차적으로 진행이 될 수 있을까? 라는 의문이 들 수 있다.
<두 가지가 있다>
1.await 때문에 : 값이 들어오기전까지 진행을 멈춰놓고 값이 들어오면 진행이 되기 때문에
2.비동기통신의 return 값은 Promise객체다.🔥
axios.get("주소").then(()=>{성공했으면 실행}
).catch(()=>{error났을떄 실행 될 코드})
).finally(그냥 실행이 되면 뜨는 거)
객체를 안의 값을 부를때 fruit.red라고 키 값을 .찍고 호출하면 apple 이런식으로 value가 나오듯이
즉, axios에서 반환된 값이 Promise객체이므로 Promise안에있는 .then / .catch / .finally 을 호출 할 수 있다.
그래서 진행을 순차적으로 할 수 있다.
그 동안 하나하나씩 공부했던것이 이렇게 연결되어서 사용이 되니까 좀 더 재밌게 이해되었다.
좀 더 코드를 잘 이해할 수 있을 것 같은 느낌이 든다. 내 착각일수도ㅎ
어쨌든 오늘의 TIL 끝😎
'TIL✨' 카테고리의 다른 글
네이티브 프로젝트 시작 TIL(50) (0) | 2023.01.06 |
---|---|
Todo 돌이켜보기_TIL(49) (1) | 2023.01.05 |
async await 간단한 정리_TIL(47) (0) | 2023.01.04 |
useEffect_TIL(46) (0) | 2023.01.02 |
리액트 네이티브_TIL(45) (0) | 2023.01.01 |