
➡ Redux에서 action을 dispatch하면 바로 state가 변경되어, 비동기 처리가 불가능하다.
➡ 비동기 처리를 위해 Redux-thunk, Redux-saga 등장!

➡ Redux-saga는 비동기의 다양한 상황을 처리하기 좋고,
테스트나 디버깅이 쉽기 때문에 많이 이용되는 추세
function* 키워드를 사용한다function* generateNumber() {
yield 1;
yield 2;
return 3;
}
const generator = generateNumber();
console.log(generator.next().value) // 1
console.log(generator.next().value) // 2
console.log(generator.next().value) // 3
console.log(generator.next().value) // undefined
saga가 generator 함수를 의미함
takeEvery: 모든 액션을 유효하게 인정takeLatest: 마지막 액션 하나만 유효하게 인정React에서 공식적으로 전역상태를 관리할 수 있는 Context API를 제공
React 자체 전역상태 관리 API이기 때문에 최근 새로운 프로젝트에 굉장히 많이 도입되고 있다.
Redux, react-router, styled-components 오픈소스를 보면 Context API를 사용하고 있다!
Provider는 context를 구독(Consumer)하는 컴포넌트들에게 context의 변화를 알린다.
Provider 하위에 있는 컴포넌트 중에 context를 구독(Consumer)하는 부분이 Provider의 value가 바뀔때마다 다시 렌더링 된다.
➡ Provider 하위에 있다고 value가 업데이트 될 때마다 모든 컴포넌트가 다시 렌더링 되는게 아니다!
➡ context를 구독이 포함되어 있는 컴포넌트도 다시 렌더링 되는게 아니다!
➡ 오직 context.Consumer 부분만 rerender 된다.
당연히!! Provider 컴포넌트 외부에 있는 컴포넌트에는 변화를 감지하지 못한다.
useContext를 사용하면 훨씬 편하게 사용 가능하다.auth와 상태를 변경하는 함수인 setAuth를 추가setAuth 함수를 사용하여 auth 값을 true로 바꿔줌//AuthContext.js
import { createContext, useEffect, useState } from 'react';
import { login } from './AuthService';
const AuthContext = createContext({}); // 1️⃣
export const AuthProvider = ({ children }) => { // 4️⃣
const [auth, setAuth] = useState(false);
useEffect(() => {
setAuth(login()); // 3️⃣
}, []);
return (
<AuthContext.Provider value={{ auth, setAuth }}> // 2️⃣
{children}
</AuthContext.Provider>;
};
export const AuthConsumer = AuthContext.Consumer; // 4️⃣
export default AuthContext; // 4️⃣
코드설명
createContext는 초기 값을 매개변수로 받는데 필수는 아니다.
➡ 작성해도 2. provider를 정의하는 곳에서 덮어 씌워지기 때문에 작성하지 않았다.
Provider에서 사용할 auth(로그인 여부)와 로그인 여부를 업데이트 해주는 setAuth 함수를 넣는다.
최초(현재) 로그인 여부 파악
AuthContext, AuthProvider, AuthConsumer를 나누어서 export하였다. (context/provider/consumer를 한 파일에서 관리하고, 아래와 같이 사용하기 위해서)
import AuthContext, { AuthProvider, AuthConsumer } from './AuthContext';
반응형 웹이란, 하나의 웹사이트에서 PC, 스마트폰, 태블릿 PC 등 접속하는 디스플레이의 종류에 따라 화면의 크기가 자동으로 변하는 웹 페이지를 의미.
IT 기기의 종류가 더욱 다양해짐에 따라 디스플레이의 크기에 맞게 유동적으로 반응하는 반응형 웹을 구현하는 것이 더욱 중요해졌다.

@media only screen and (max-width: 480px) {
body {
font-size: 12px;
}
}
@media : media 쿼리 시작only screen : 어떤 디바이스에서 적용하는지 알려준다.only screen : 어떤 디바이스이던지 상관없이, 화면에 보이는 스크린이기만 하면 전부 적용only print : 프린트를 하고싶을 때 적용and (max-width : 480px) : media feature라고 불리는 부분, 조건 작성하기/* mediaQuery.scss */
$phone: "only screen and (max-width: 768px)";
$desktop: "screen and (min-width: 769px)";
@import './mediaQuery.scss';
.big-box {
@media #{$phone} {
display: none;
}
@media #{$desktop} {
display: block;
}
}
웹사이트가 어느 버전의 브라우저에서나, 어느 디바이스에서도 원하는 결과물이 나오도록 확인하고 수정하는 단계
➡ ie, chrome, safari는 기본이고, 모바일에서 카카오톡 웹뷰, 네이버 웹뷰에서도 잘 뜨는지 직접 꼭 확인해야 한다!
react-app-polyfill 설치 yarn add react-app-polyfill
// These must be the first lines in src/index.js
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
node_modules/.cache 삭제browserslist에 ie 11 추가 "browserslist": {
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version",
"ie 11"
]
}