env 환경을 사용하기 위해서는 node환경 세팅이나 webpack, babel 등 서버 환경에서 사용할 세팅이 필요하다는 것을 알게 되었다.
지금까지 React, Angular 등 다양한 라이브러리 및 프레임워크가 자동으로 세팅해주었기에 벡엔드 환경을 해줬던 것이였다.
참고: https://yujo11.github.io/javascript/Vanilla%20JS%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%20%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0/
Node.js 환경에서 env 파일을 로드하려면 라이브러리가 필요하다.
1. 설치
yarn add dotenv
2. .env 파일 생성 및 작성
3. gitignore에 env 추가하기
4. JS파일에서 파일 로드 및 사용
require('dotenv').config(); // env 파일 로드
const apiKey = process.env.API_KEY;
const debug = process.env.DEBUG;
console.log('API Key:', apiKey);
console.log('Debug Mode:', debug);
참고: https://fe-developers.kakaoent.com/2022/221124-router-without-library/
요즘에는 잘 사용하지 않지만 라이브러리와 프레임워크 없이 바닐라 JS로 라우팅을 개발하기 위해서 2가지 방법이 있는데 해시 라우터와 history API를 사용하는 것
<a>
태그를 사용하여 링크를 클릭하면 해시값이 변경되는 것을 확인할 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./style.css" />
<title>Document</title>
</head>
<body>
<noscript>js 실행 허용 X</noscript>
<nav class="sidebar">
<a href="#/">Home</a>
<a href="#/about">About</a>
</nav>
</body>
</html>
404 에러가 나타나길래 뭔가 했더니 경로에 import Page from "./Page.js";
이렇게 import 해줘야 하는데 "./Page" 이렇게 되어있었다.
import Home from "./pages/Home.js";
import About from "./pages/About.js";
import NotFound from "./pages/NotFound.js";
const routes = {
"#/": new Home(),
"#/about": new About(),
404: new NotFound(),
};
// router 클래스 종류
export const renderPage = async () => {
const path = window.location.hash || "#/"; // 해시가 비어있으면 기본으로 #/
const selectedPage = routes[path] ?? routes[404];
// console.log(selectedPage);
selectedPage.render();
};
부모 클래스인 render에
render() {
// 메서드 정의
document.getElementById("root").innerHTML = this.htmlString;
}
가 정의되어 있기 때문에 각 클래스의 htmlString만 다르면 해당 html요소가 렌더링 된다.
공식문서에서 권장하는 형태
function 이나 화살표 함수로 정의하고 return 문에 jsx 코드를 반환
class로 정의하고 render()함수에서 jsx코드를 반환
import React, { Component } from "react";
class NameBox extends Component {
render() {
const name = "react";
return <div className="react">{name}</div>;
}
}
export default NameBox;
queryFn 실행 → 캐시 데이터 등록 { pages, pageParam } →
getNextPageParam 실행 (리턴된 NextPageParam는 훅 내부 메모리에 저장. 캐시에 저장X) 최신 pages 데이터를 lastPage로 넘겨 다음 페이지 여부를 확인 가능한 파라미터를 이용하여 T,F 판단→
(NextPageParam 이 undefined이 아니면) hasNextPage true로 상태변경 →
fetchNextPage 실행 →
queryFn 실행 (이 때 내부적으로 저장되어 있던 NextPageParam을 queryFn 의 매개변수로 넘겨줌)
const processedPosts = useMemo(() => {
return posts?.pages
.map((data) => {
return data.posts;
})
.flat();
}, [posts]);
{pages: Array(n), pageParams: Array(n)} 으로 이루어져 있는 데이터들 중 pages에 담겨있는 데이터들을 캐싱 처리하여 변경된 데이터가 있을 때에만 processedPosts를 다시 계산한다.
스크립트 내에 debugger
를 작성해두면 중단점이 된다.