11월 21일 (일) redux (store)
store
state가 관리되는 오직 하나뿐인 저장소의 역할을 한다
Redux 앱의 state가 저장되어 있는 공간이이며, createStore 메소드를 활용해 reducer를 연결하는 방법이다
createStore와 더불어 다른 리듀서의 조합을 인자로 넣어서 스토어를 생성할 수 있다
(미들웨어
와 Redux devtools
지원을 위해 두번째 인자에 추가적인 내용이 들어간다)
Store 설정 설명
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
와 compose
리덕스 개발자도구와 미들웨어를 사용하기 위해서 window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
를 사용한다
(크롬 확장 프로그램에 작성되어있는 자바스크립트 함수)
만약에 리덕스 개발자도구가 설치되어있지 않다면 일반 compose
를 사용
compose가 하는 일은 깊이 중첩된 함수 변환을 길게 늘어진 코드 없이 작성하게 해주는 것 뿐 이다
enhancer란
enhancer란 말 그대로 redux의 기능을 도와주는 미들웨어나 데브 툴즈와 같은 것들을 말한다
applyMiddleware란
// 일반적으로 sotre를 생성하는 방법 const sotre = createStore(reducer); // applyMiddleware를 활용하여 미들웨어를 거쳐가도록 하는 store 생성법 const store = createStore(RootReducer, applyMiddleware(promiseMiddleware, ReduxThunk))
redux-thunk, redux-promise를 미들웨어로 사용
미들웨어란, 액션과 리듀서 사이에 존재한다, 특정 액션을 가하고 리듀서가 처리하기 전에 작업을 처리한다일반적으로 React에서 redux를 사용한다고 하면 다음과 같이 4개를 사용한다
redux-thunk나 promise는 미들웨어다
thunk 대신 redux-saga를 쓰는 경우도 있지만 우선은 간단하게 thunk와 promise를 사용하자
redux react-redux redux-thunk : dispatch에게 함수 형식을 대처하게 한다 redux-promise : dispatch에게 프로미스 형식을 대처하게 한다
일반적인 redux에서는 객체 형태만을 받아들이지만 프로미스와 함수 형식을 대처할 수 있도록 미들웨어로 처리를 해서 다음과 같이 store를 만들어 준다
compose를 사용해 enhancer를 만든다
Next에서 사용한 코드라서 withRedux 같은 게 붙긴 했지만,
기본적으로 compose는 순차적으로 함수를 적용해나가는 gulp의 pipe 같은 역할을 한다import { compose, createStore, applyMiddleware } from "redux"; import rootReducer from '../reducers/index'; import thunk from "redux-thunk"; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose; const store = createStore(rootReducer, composeEnhancers(applyMiddleware(thunk))); export default store;
redux store 패키지 적용
1. rootReducer 를 import 하여 createStore 함수안에 넣어준다
import rootReducer from "./modules"
const store = createStore(rootReducer, [])
2. Provider 컴포넌트를 사용하여 프로젝트에 리덕스를 적용한다
import { Provider } from "react-redux"
import store from './store/store';
ReactDOM.render(
<Provider store={store}>
<React.StrictMode>
<App />
</React.StrictMode>
</Provider>,
document.getElementById("root")
)
3. Redux DevTools(리덕스 개발자 도구) 를 크롬확장 프로그램에 설치한다
yarn add redux-devtools-extension npm i redux-devtools-extension
import { composeWithDevTools } from "redux-devtools-extension"
const store = createStore(rootReducer, composeWithDevTools())
Redux DevTools(리덕스 개발자 도구) 를 크롬확장 프로그램에 받아서 사용
window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION()
redux DevTools 관련 (2번 방법 사용법이 나와있다)
1 은 실패 .. 왜 안되는 건지 모르겠다
imaport { createStore } from "redux" const store=createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION() export default store;
2 추천
import { compose, createStore, applyMiddleware } from "redux"; import rootReducer from '../reducers/index'; import thunk from "redux-thunk"; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose; const store = createStore(rootReducer, composeEnhancers(applyMiddleware(thunk))); // console.log('store', store) export default store;
Author And Source
이 문제에 관하여(11월 21일 (일) redux (store)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@southbig89/11월-21일-일-redux-store저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)