본문 바로가기

반응형

Frontend

(29)
[React] useState 업데이트 값이 즉시 반영되지 않는 문제 (useState와 useRef) 1. 개요(문제) 사용자의 현재 위치를 받아와 지도에 표시하고자 했다. 초기 로직 위치 값 useState로 초기화하기 navigator.geolocation.getCurrentPosition API를 통해 현재 위치 가져오기 받아온 값으로 state 업데이트하기 하지만 useState 업데이트 값이 즉시 반영되지 않는 문제가 발생했다. const Map = () => { const [curLoc, setCurLoc] = useState({lat: 0, lng: 0}); const handleGeoSuccess = (pos) => { const lat = pos.coords.latitude; const lng = pos.coords.longitude; const coordsObj = { lat, lng,..
[NextJS] NextJS 시작하기 - 8. URL에 데이터 전달하고 가져오기(Catch All URL) 1. 모든 URL 잡기 pages 하위에 파일명을 [...params].js(원하는 이름 사용)와 같이 설정하면 어떤 URL이라도 잡을 수 있다. 이를 이용해 영화 제목을 URL에 넣고, URL에서 정보를 받아 About 페이지에 뿌려줄 것이다. 1. pages/movies/[id].js를 pages/movies/[...params].js로 수정하고 2. index.js에서 페이지 이동 부분을 수정한다. const onClick = (id, title) => { router.push(`/movies/${title}/${id}`); }; {movie.original_title} 이때, 홈에서 영화 하나를 클릭하면, 디테일 페이지의 URL은 /movies/Sing%202/438695와 같고, router를 ..
[NextJS] NextJS 시작하기 - 7. 다이나믹 라우팅 & 페이지 이동 1. Routes NextJS의 개요를 다루면서, pages 폴더에 대해 살펴본 적이 있지만, 오늘은 더 자세한 기능을 볼 것이다. pages는 페이지 라우팅을 자동으로 설정해주는 폴더로, 정적 라우팅은 물론 동적 라우팅도 가능하다. 아래 표를 통해 사용법을 확인하자. pages 하위 폴더 구조 URL pages/index.js / pages/about.js /about pages/movies/index.js /movies pages/movies/all.js /movies/all pages/movies/[id].js /movies/12 동적 라우팅은 [변수].js 파일을 통해 설정할 수 있다. pages/movies/[id].js 에서는 id를 변수의 이름으로 설정한 것이고, useRouter를 통해 확..
[NextJS] NextJS 시작하기 - 6. Server-Side Rendering 설정하기 (getServerSideProps) 1. Server-Side Rendering 특징 유저에게 보여주기 위한 모든 UI를 서버가 준비하는 것이다. 서버는 필요한 모든 데이터를 받아 HTML 안에 넣어 클라이언트에게 전달한다. 즉, 클라이언트는 온전한 HTML(데이터 포함)을 받아 유저에게 화면을 보여준다. 이렇게 HTML에 모든 정보가 포함되어 있어 SSR은 SEO에 좋다. ex. SSR에서 API fetch를 하는 경우 서버에서 API에 대한 작업(호출->응답)이 완료되었을 때 페이지가 렌더링된다. 이때 유저는 로딩화면을 보지 않고 바로 데이터가 포함된 화면을 볼 수 있다. 단, API 응답이 느린 경우 유저는 아무것도 없는 빈 화면을 보게 된다. 2. getServerSideProps Next가 React와 다른 가장 큰 차이점은 SS..
[NextJS] NextJS 시작하기 - 5. 영화 데이터 가져오기 & API KEY 숨기기 (feat. optional chanining, redirects, rewrites) 1. 영화 데이터 가져오기 (javascript & react 관련) 데이터 가져오기 https://www.themoviedb.org/?language=ko에서 영화 API를 사용한다. 위 아래 코드의 결과는 동일하다. (아직 위 코드처럼 쓰는 게 익숙지 않다..) useEffect(() => { (async () => { const { results } = await ( await fetch( `https://api.themoviedb.org/3/movie/popular?api_key=${API_KEY}` ) ).json(); setMovies(results); })(); }, []); useEffect(() => { const getMovie = async () => { const { results ..
[NextJS] NextJS 시작하기 - 4. 영화 앱 구조 잡기 & SEO 1. Patterns NextJS 프로젝트를 만들 때 주로 따르는 패턴을 알아보자. 사람들은 대체로 너무 큰 _app.js 파일을 원하지 않는다. (왜?? 일단 그렇다고 한다.) 따라서 아래와 같이 Layout 컴포넌트를 만들어 사용한다. (보면 볼수록 gatsby와 비슷하다. 다만, _app.js의 존재로 Layout을 각 페이지마다 직접 넣어주지 않아도 된다는 점이 next의 특징인듯) components/Layout.js import NavBar from './NavBar'; export default function Layout({ children }) { return ( {children} ); } pages/_app.js import Layout from '../components/Layout..
[NextJS] NextJS 시작하기 - 3. Next.js 개요 아래 강의 중 "NextJS 시작하기"를 보고 정리한 내용입니다. (+ 추가적인 것도 있음) https://nomadcoders.co/nextjs-fundamentals/lectures/3454 All Courses – 노마드 코더 Nomad Coders 초급부터 고급까지! 니꼬쌤과 함께 풀스택으로 성장하세요! nomadcoders.co 1. pages create-next-app으로 프로젝트를 초기화하면 자동으로 폴더 구조가 생성된다. (gatsby와 비슷한 느낌?!) 최상위 아래에 pages라는 폴더가 있는데, 이는 라우터의 기능을 한다. pages 하위에 파일을 생성하면 파일명이 url 주소가 된다. (컴포넌트명은 중요하지 않음) index.js는 홈으로 설정되어 있다. (ex. localhost:..
[NextJS] NextJS 시작하기 - 2. React.js와 Next.js의 차이점 (framework vs. library, CSR vs. SSR) 아래 강의 중 "NextJS 시작하기"를 보고 정리한 내용입니다. (+ 추가적인 것도 있음) https://nomadcoders.co/nextjs-fundamentals/lectures/3454 All Courses – 노마드 코더 Nomad Coders 초급부터 고급까지! 니꼬쌤과 함께 풀스택으로 성장하세요! nomadcoders.co 1. Framework vs. Library React.js는 라이브러리이고, Next.js는 React.js의 프레임워크이다. 이 둘의 궁극적인 차이점은 "응용 프로그램의 흐름 주도권을 누가 가지고 있느냐"이다. 1) Framework 코드를 작성하는 기본적인 틀을 제공해서 보다 효율적으로 어플리케이션을 만들 수 있도록 하는 소프트웨어 환경 응용 프로그램은 프레임워크에..

반응형