1) props ์์ด ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ state๋ฅผ ์ง์ ๊บผ๋ด ์ธ ์ ์๊ธฐ ๋๋ฌธ
2) state ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ธฐ ๋๋ฌธ (state๋ฐ์ดํฐ์ ์์ ๋ฐฉ๋ฒ์ ๋ฏธ๋ฆฌ ์ ์ํ๋ค)
๐ฃ Redux ๋ฅผ ์ฌ์ฉํ ์ํ ์ ๋ฌ(๊ณต์ ) ๊ตฌ์กฐ
store
: ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ๋ผ๋ฆฌ ์ง์ ๊ต๋ฅํ์ง ์๊ณ store ์ค๊ฐ์๋ฅผ ํตํด ๊ฐ์ ๊ณต์ ํ๋ค.dispatch
: store์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ธฐ๋ฅsubscribe
: state์ํ์ ๋ณ๋์ด ์์ผ๋ฉด ์ปดํฌ๋ํธ์ ๋ฐ์ํ๋ ๊ธฐ๋ฅ
๐ redux ์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install redux react-redux
ํฐ๋ฏธ๋์ ์ค์น2)
index.js
ํ์ผ์ ์ ํ2-1. importํด์ฃผ๊ธฐ
import { Provider } from 'react-redux';
import { createStore } from 'redux';
2-2)
<App />
์ปดํฌ๋ํธ๋ฅผ<Provider>
์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๊ธฐ
<Provider>
<App />
</Provider>
2-3) ๋ณ์ ์์ฑํด์ createStore() ๋ด๊ธฐ
const store = createStore( () => { return "state์ ์ฅ" } );
โ createStore() ์์๋ ์ฝ๋ฐฑํจ์๋ก state๋ฅผ ์ ์ฅํ๋ค2-4)
<Provider>
์ store ๋ณ์๋ฅผ ๋ด๋๋ค(state ์ด๊ธฐ๊ฐ์ด ๋ด๊ฒจ์๋ค)
<Provider store={store}>
โ<Provider>
์ props๋ก ์ ์กํ๋ ๊ฒ3) state๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ปดํฌ๋ํธ์ ๊ฐ์ props๋ก ๋ฐ๊ธฐ
3-1) Cart.js(state๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ปดํฌ๋ํธ)์ ํจ์ ๋ฐ์ ์ค์ (export ๋ฐ๋ก ์)
function ํจ์๋ช ์๋ช (state) {
return { state: state }
};
export default connect(ํจ์๋ช ์๋ช ) (Cart)
โ function๋ง๋ ๋ค,export default connect ( ํจ์๋ช ์๋ช ) ( ์ปดํฌ๋ํธ๋ช )
ํด์ฃผ๊ธฐ
๐ป redux ์ ์ฉ ์์
// index.js import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; // redux import { BrowserRouter } from 'react-router-dom'; import { Provider } from 'react-redux'; import { combineReducers, createStore } from 'redux'; // ์ฝ๋ฐฑํจ์ ์์ state์ด๊ธฐ๊ฐ์ ๋ด์์ค๋ค(์ฌ๋ฌ๊ฐ๋ฉด ๋ฐฐ์ดํ์) const store = createStore( () => { return [ // state์ด๊ธฐ๊ฐ์ ๊ฐ์ฒด๋ก ์ฌ๋ฌ๊ฐ(๋ฐฐ์ด)๋ด์. {id: 0, name: ๋ฉ์ง์ ๋ฐ, quan: 2}, {id: 1, name: ์์์ ๋ฐ, quan: 3}, {id: 3, name: ๊ท์ฌ์ด์ ๋ฐ, quan: 1} ] }); ReactDOM.render( <BrowserRouter> <Provider store={store}> // state์ด๊ธฐ๊ฐ์ ๋ด์ store๋ณ์๋ฅผ provider์ ๋ด๋๋ค <App /> </Provider> </BrowserRouter>, document.getElementById('root') ); // Cart.js import React from 'react'; import { connect } from 'react-redux'; // import ํด์ฃผ๊ธฐ const Cart = (props) => { return ( <div className="Cart"> // ์ฝ๋ ์๋ต { // state๋ฅผ props๋ก ๋ฐ์์์ผ๋ฏ๋ก props.state๋ก ๋ฐ์ดํฐ ๋ถ๋ฌ์จ๋ค props.state.map( (a, i) => { return ( <tr key={i}> <td>{i+1}</td> <td> { props.state[i].name } </td> <td> { props.state[i].quan } </td> // ์๋์์ "state๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฑ๋ก"ํ props๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํ ๊ฒ. </tr> ) }) } </div> ); }; โ redux store ๋ฐ์ดํฐ ๊ฐ์ ธ์์ props๋ก ๋ณํํด์ฃผ๋ ํจ์ !!!!! // state๊ฐ์ props๋ก ๋ฐ์์ค๋ ์ค์ ์ ํด์ค๋ค (function๋ง๋ ๋ค, export ์กฐ์ ) function cartInfo(state) { return { // state๋ฐ์ดํฐ๋ฅผ state๋ผ๋ ์ด๋ฆ์ props๋ก ๋ฑ๋กํ๋ ๊ฒ. state: state } }; export default connect(cartInfo) (Cart)