[React-Redux] React-Redux
2022.04.02
React-Redux 패키지와 Hooks 사용
React-Redux 패키지 설치
npm install react-redux
Provider 컴포넌트 사용
(내용 추가 필요)
React-Redux에서 제공하는 Provider 컴포넌트를 리액트의 최상위 컴포넌트로 정의한다.
index.js
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import rootReducer from './redux';
import { HelmetProvider } from 'react-helmet-async';
const store = createStore(rootReducer);
ReactDOM.render(
<Provider store={store}>
<HelmetProvider>
<App />
</HelmetProvider>
</Provider>,
document.getElementById('root'),
);
/redux/index.js
import { combineReducers } from 'redux';
import comments from './comments';
const rootReducer = combineReducers({ comments });
export default rootReducer;
useSelector
state 값만 인수로 받는다. → Store의 상태에 접근해서 데이터를 가져온다.
리덕스의 Store를 subscribe하고 액션이 dispatch 될 떄마다 selector를 실행한다.
그리고 useSelector()는 기본적으로 형변환 비교(==)가 아닌 엄격한 비교(===)를 사용한다.
import React from 'react';
import { useSelector } from 'react-redux';
export const TodoListItem = (props) => {
const todo = useSelector((state) => state.todos[props.id]);
return <div>{todo.text}</div>;
};
useDispatch
컴포넌트 내에서 dispatch를 사용할 수 있게 해준다. 이 dispatch를 이용해 action을 발생시킨다.
import React from 'react';
import { useDispatch } from 'react-redux';
export const CounterComponent = ({ value }) => {
const dispatch = useDispatch();
return (
<div>
<span>{value}</span>
<button onClick={() => dispatch({ type: 'increment' })}>Increment counter</button>
</div>
);
};
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
function Component() {
const dispatch = useDispatch();
useEffect(() => {
dispatch({ type: Action });
}, [dispatch]);
const value = useSelector((state) => state.value);
return <div>{value}</div>;
}