๋ฆฌ๋์ค๋ฅผ ํ๋ฒ ์ ๋ฆฌํ ์ ์ด ์๋ ํํ๋ก์ ํธ๋ฅผ ์ค๋นํ๋ฉด์
๋ค์ํ๋ฒ ๋ ๊ผผ๊ผผํ ๊ฐ๋
์ ๋ฆฌ๋ฅผ ํ๊ธฐ์ํด ์์๋ณด์ โช( 'ฯ' ู(ู"
Redux๋ฅผ ์ฐ๋ ์ด์
1. props ๋ฌธ๋ฒ ๊ท์ฐฎ์ ๋
2. state ๋ณ๊ฒฝ ๊ด๋ฆฌ ํ ๋
redux๋ฅผ ์ค์นํ๋ฉด state๋ฅผ ๋ณด๊ดํ๋ ๋ณด๊ดํจ์ ๋ง๋ค ์ ์๋ ๊ฑฐ์
Reducer
์ํ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ Hook
useState๋ฅผ ํตํ ์ํ ๊ด๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ์ถ๊ฐ / ์ ๊ฑฐ / ์์ ๋ฑ์ ๊ฐ์ข Handler๋ฅผ ํ๋์ ํจ์๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด์คconst [state, dispatch] = useReducer(๋ฆฌ๋์ ์ด๋ฆ, ์ด๊ธฐ ๋ฐ์ดํฐ)
export function userReducer(state, action){ switch (action.type){ case 'ADD': return [...state, action.data] case 'REMOVE': return ~~~ default: throw new Error(`Unhandled action type : ${action.type}`) } } //state๋ ๋ง๊ทธ๋๋ก ํ์ฌ ์ํ๊ฐ, //action์ dispatch ํจ์ ์คํ ์ ์ธ์๋ก ๋ฃ์ด์ค ๊ทธ ๊ฐ์ ๋งํฉ๋๋ค //๊ทธ๋์ type:ADD๋ผ๊ณ ์ธ์์ ๋ช ์ํ๋ฉด action.type์ ํตํด์ ๊ทธ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋จ //dispatch({type: 'ADD'}) -> action = {type: 'ADD'}
์ปดํฌ๋ํธ์์ state ์์ ์์ฒญํ๋ ค๋ฉด? dispatch ์ฐ๋ฉด๋จ
์ค์น๋ฐฉ๋ฒ
yarn add redux react-redux
์ธํ ๋ฐฉ๋ฒ
import {Provider} from 'react-redux';
<Provider> </Provider>
์ํ๋ ๊ณณ ๊ฐ์ธ๊ธฐ
๊ฐ์ธ์ง ๋ถ๋ถ์ props์์ด๋ state ๊ณต์ ๊ฐ๋ฅ
import {createStore} from 'redux';
let store = createStore(()=>{return [{id:0, name:'๋ฉ์ง์ ๋ฐ', quan:2}]});
- ์ปดํฌ๋ํธ์์ store์ ์๋ state์ฐ๋ ค๋ฉด
import {connect} from 'react-redux';
- function๋ง๋ค๊ธฐ
function ํจ์๋ช (state){ //state๋ฅผ propsํ์ํด return { state : state } }
- export default connect()()
export default connect(ํจ์๋ช )(App)
- store ๋ฐ์ดํฐ๋ฅผ props๋ก ๋ฑ๋กํ๊ธฐ
function App (props) { return ( <div> <div>{props.state[0].name}</div> </div> ); };