➡ 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"
]
}