
κ²μκΈ READ κΈ°λ₯μ μν΄ getμμ²μ νλ λ‘μ§μ μλμ κ°μ΄ μμ±νλ€.
// http ν΅μ λ‘μ§(get)
import axios from 'axios';
const getPosts = async () => {
return axios
.get(`/post`, {
baseURL: process.env.REACT_PUBLIC_API_URL,
headers: {
withCredentials: true,
// λ‘κ·ΈμΈ κΈ°λ₯μ μμ§ κ΅¬νμ€μ΄λΌ μλ²λ΄λΉ νμλΆμ΄ ν ν°μμ΄λ νμΈκ°λ₯νλλ‘ ν΄μ£Όμ
¨λ€.
// Authorization: `Bearer ${localStorage.getItem('token')}`,
'Content-Type': `application/json`,
},
})
.catch(err => console.log(err));
};
export default getPosts;
// react-queryμ useQueryλ₯Ό μ΄μ©νλ λ‘μ§
import { useQuery } from '@tanstack/react-query';
import getPosts from '../../apis/post/getPosts';
const useGetPosts = () => {
return useQuery(['get/post'], () => getPosts(), {
enabled: false,
});
};
export default useGetPosts;
// μμ² λ° μλ΅μ λν dataλ₯Ό λ°μ μ¬μ©ν μ»΄ν¬λνΈ
import { useEffect } from 'react';
import useGetPosts from '../hooks/post/useGetPost';
const RenderPosts = () => {
const { data, refetch } = useGetPosts();
useEffect(() => {
refetch();
}, []);
console.log(data); // refetch μ€νμ΄ μ λλ€λ©΄ μλ΅λ°μ΄ν°κ° μ°νμΌν¨
return <div>posts</div>;
};
export default RenderPosts;
μμκ°μ΄ λ‘μ§μ μμ±νλλ 404μ€λ₯μ ν¨κ» μμ²μ΄ ν΄λΌμ΄μΈνΈ μλ² μ£Όμλ‘ κ°κ³ μλ κ²μ νμΈνλ€.

.env νκ²½λ³μ νμΌ λ΄ localhost:8080 μΌλ‘ api μ£Όμλ μ μμ±ν΄λ κ²μ νμΈνκ³ λ‘μ§λ€μ λ€μ μ΄ν΄λ΄λ λ¬Έμ μμ΄λ³΄μ΄λ κ³³μ΄ μμλ€.
μ μμ²apiκ° ν΄λΌμ΄μΈνΈ μλ²λ‘ λμ΄μμκΉ? κ³ λ―Όνλ μ€ νκ²½λ³μκ° μλͺ»λμμκΉνλ μμ¬μ΄ μκ²Όκ³ νμΈμ μν΄ λ³μ λμ μ§μ apiλ₯Ό λ£μ΄λ³΄μλ€.


μλ΅μ μ λ°μμλ€!! κ·Έλ λ€λ©΄ νκ²½λ³μμ λ¬Έμ !
api μ£Όμλ μ μμ±λμ΄ μμΌλ μ΄λ¦μ΄ λ¬Έμ μκ³ κ΅¬κΈλ§μ ν΅ν΄ React νκ²½λ³μ λ³μλͺ
쑰건μ μκ²λμλ€.
react νκ²½λ³μ
reactμμ νκ²½ λ³μ μ§μ μ, λ³μλͺ μ μ λμ¬λ‘ REACT_APP_ μ μ¬μ©ν΄μΌ νλ€.

λ³μλͺ λ³κ²½ ν μ μ©ν΄μ£Όλ μ μλνλ€!! πππ
+ π‘ Next.js μμλ NEXT_PUBLIC_ μ λΆμ¬μ£Όμ΄μΌ νλ€.