(notes)
index.js의 최상위 root에 store 제공하기
//index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import { Provider } from 'react-redux'; //import Provider from react-redux
import store from './store' //<- provide store
import './index.css';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<Provider store={store}>
<App />
</Provider>
);
최상위 컴포넌트인 <App />에 store 을 제공했기 때문에 앱의 모든 하위, 그 이상 하위의 컴포넌트 모두에서 store의 state 에 접근할 수 있다.
컴포넌트에서 store 데이터에 접근하기
<Counter /> 컴포넌트에서 store에 접근하는 법
import { useSelector, useDispatch } from 'react-redux'
import classes from './Counter.module.css';
const Counter = () => {
const dispatch = useDispatch()
const counter = useSelector(state => state.counter); //executed by react-redux, select a specific part of return object of reducer
//can get data in needed
const incrementHandler = () => {
dispatch({ type : 'increment' });
}
const decrementHandler = () => {
dispatch({ type : 'decrement' });
}
const toggleCounterHandler = () => {};
return (
<main className={classes.counter}>
<h1>Redux Counter</h1>
<div className={classes.value}>-- {counter} --</div>
<div>
<button onClick={incrementHandler}> + </button>
<button onClick={decrementHandler}> - </button>
</div>
<button onClick={toggleCounterHandler}>Toggle Counter</button>
</main>
);
};
export default Counter;
위 코드를 통해 Counter component는 store을 자동으로 구독하게 되고, 필요한 데이터가 변경될 때 마다 컴포넌트는 자동으로 업데이트되고 최신의 데이터를 받게 된다.
'Computer Programming > React' 카테고리의 다른 글
HTML <a>태그의 target 사용 시 주의점 (rel = "noreferrer") (0) | 2023.06.22 |
---|---|
리액트의 렌더링 순서와 렌더링 최적화하는 법 (memoization을 통해 불필요한 리렌더링 해결하기!) (2) | 2023.05.20 |
Redux 시작하기 / 기본 구조 (Reducer, Subscribe, Dispatch란?) (0) | 2023.05.17 |
리액트 React Side effects와 useEffect hook (0) | 2023.05.16 |
Redux(리덕스) 사용 이유 (Context와 차이점)와 작동방식 (0) | 2023.05.16 |