props를 안 쓰려고!
→변수를 props로 전달해야하는데 컴포넌트에서 필요없는 props라도 전달을 해줘야하는 상황을 방지하기 위해(a.k.a prop drilling
)
상태관리를 편하게 하려고!
→ 각각의 컴포넌트에서만 hook을 이용해서 관리하는것이 아닌, 웹 페이지 전체에서 사용되는 전역변수
를 관리하기 쉽다.
action creator
dispatcher
store
- 애플리케이션 내의 모든 상태와 관련된 로직을 가지고 있음.
- 모든 상태변경은 store에 의해 결정됨
- 상태 변경을 요청하기 위해서는 1→2→3의 순서로진행됨.
⇒ 내가 생각했을 때는, flux 패턴은 데이터가 단방향으로 흐르고, 미리 액션으로 지정해둔 함수들을 디스패처를 통해 가져오고 스토어를 통해 저장시켜준다고 이해하면 될 것 같다!
설치
npm install --save redux react-redux
npm install react-redux
만 하던데,index.js
설정
import
import { Provider } from "react-redux";
import { createStore } from "redux";
상태관리할 변수 선언
const like = 0;
action선언
function hello(state = like, action) {
if (action.type == "increase") {
state++;
return state;
} else if (action.type == "decrease") {
state--;
return state;
} else {
return state;
}
}
store 만들기
let store = createStore(hello);
ReactDOM.render 설정
React.StricMode
하단에 Provider
를 선언해주고store
를 넣어준다.ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById("root")
);
App.js
(컴포넌트) 설정
import
import { useDispatch, useSelector } from "react-redux";
상태관리를 할 변수 불러오기
const like = useSelector(state => state);
디스패쳐 불러오기
const dispatch = useDispatch();
디스패쳐를 이용해 액션 선언하기
onClick
이벤트에 dispatch
를 이용해서 액션을 넣어준다.type
을 이용하여 미리 지정해둔 action
을 사용할 수 있다.<button
type="button"
class="btn btn-light"
onClick={() => {
console.log("클릭");
dispatch({ type: "increase" });
}}
>
</button>
결과
전체 코드는 여기서 확인할 수 있다.