react 라이브러리
SNS, 코인거래소같은 실시간 데이터를 보여줘야하는 사이트들에 쓰면 유용함
등 등 등, 직접만들기 귀찮은 기능들을 라이브러리에 미리 만들어둠. 그거 그냥 가져다쓰면 됨.
터미널 - npm으로 설치후
npm install react-query@3
index.jsx에 import 해주기
기능 import, 변수생성, App 감싸주기.
기존 하던것과 비슷함.
import { QueryClient, QueryClientProvider, useQuery } from 'react-query' //1번
const queryClient = new QueryClient() //2번
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<QueryClientProvider client={queryClient}> //3번
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
</QueryClientProvider>
);
useQuery 상단에서 import 해온 뒤에
useQuery()로 ajax 요청을 감싸주기.
아래 코드처럼, 기존처럼 axios 등을 사용한 비동기 통신 코드를 작성.
그 코드를 useQuery()로 감싸주기.
function App(){
let result = useQuery(['작명'], ()=> axios.get('https://codingapple1.github.io/userdata.json')
.then((a)=>{ return a.data })
)
}
result라는 변수에 ajax 현재 상태가 알아서 저장됨.
<div>
{ result.isLoading && '로딩중' }
{ result.error && '에러남' }
{ result.data && result.data.name }
</div>
페이지 켜놓고 일정시간이 경과하거나
다른 창으로 갔다가 다시 페이지로 돌아오거나
다시 메인페이지로 돌아가거나 등등등
이런 여러 경우에 알아서 ajax 요청을 다시 해줌.
당연히 재요청 끄는 법, 재요청간격 조절하는 법도 있음. 적절하게 수정하여 사용하면될듯.
잠깐 인터넷이 끊겼거나 서버가 죽었거나 그러면 ajax 요청이 실패함.
실패했을 때는 얘가 4번인가 5번인가 재시도를 알아서 해줌.
부모 - 자식컴포넌트간 정보공유 위해 ajax결과를 props전송 안해도 됨.
자식컴포넌트에다가, 부모컴포넌트에서 ajax 요청하던 코드 똑같이 또 적으면 됨.
그거 똑같은 요청 2번인데 비효율적인거 아닌가 싶은데, react-query는 같은 ajax 요청이 2개나 있으면 1개만 날려주고, 캐싱기능이 있기 때문에 이미 같은 ajax 요청을 한 적이 있으면 그걸 우선 가져와서 씀.
근데 ajax 요청을 몇초마다 계속 날려서 가져오는 방식이라 http1을 쓰는 서버나 브라우저라면 좀 비효율적일 수도 있음.
맞음. 그래서 react-query는 ajax 관련 기능개발 편하게 할 수 있는데에 의의를 더 둘수도있음. 적당히 짬뽕해서 써도 되고.
뭐가 더 좋은지는 직접 써보고 비교해봐야 알것같음.