본문 바로가기
프론트엔드로 가는 길/react

08. react_redux

by woody-j 2023. 1. 30.

Redux 왜써?!

props 없이 state를 공유할 수 있게 도와주는 라이브러리
js파일 하나에 그냥 state 저장해놓고 모든 component가 직접 꺼내쓰는 거 가능
props 전송 안해도 된다~! 꺄륵


1. Redux Toolkit Install


1) Redux 설치

npm install @reduxjs/toolkit react-redux

※ 설치 전에 packge.json 열어서 react,react-dom 두개 18.1x 이상이면 사용가능


2)Redux 셋팅

(1) state 보관 파일 생성

import { configureStore } from '@reduxjs/toolkit'

export default configureStore({
  reducer: { }
})

store.js 파일(state 보관) 생성 후 상단 코드 복붙

(2) Provider component & state 보관 파일 import

import { Provider } from "react-redux";
import store from './store.js'

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
  // store={import한거}
    <Provider store={store}>
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </Provider>
  </React.StrictMode>
);

2. Store에 State 보관

1) Redux store에 state 보관하기

import { configureStore, createSlice } from '@reduxjs/toolkit'

let user = createSlice({
  name : 'user',
  initialState : 'kim'
})

export default configureStore({
  reducer: {
    user : user.reducer
  }
})

2) Redux store에 있던 state 가져다쓰기

(Cart.js)

import { useSelector } from "react-redux"

function Cart(){
  let a = useSelector((state) => { return state } )
  console.log(a)

  return (생략)
}

3. Store의 State 변경

1) store.js안에 state를 수정해주는 함수 생성

let user = createSlice({
  name : 'user',
  initialState : 'kim',
  reducers : {
    changeName(state){
      return 'john ' + state
    }
  }
})

- reducers 안에 함수 만들어주기

  • 함수 작명은 자유롭게
  • 파라미터 하나 작명 시 기존 state 이 된다.
  • return 우측에 new state 입력시 state 변경

2) export 해주기

export let { changeName } = user.actions

3) import 해주기 (dispatch 감싸서 사용)

(Cart.js)

import { useDispatch, useSelector } from "react-redux"
import { changeName } from "./../store.js"

(생략) 
let dispatch = useDispatch;
<button onClick={()=>{
  dispatch(changeName())
}}>버튼임</button>

4. State가 Object/Array일 경우 변경법
1) object/array 변경법

let user = createSlice({
  name : 'user',
  initialState : {name : 'kim', age : 20},
  reducers : {
    changeName(state){
      return {name : 'park', age : 20}
    }
  }
})

{name:'kim', age:20} 에서 name을 kim에서 park으로 바꾸고 싶다면

함수 속 return 옆에 변경사항 적기  return {name : 'park', age : 20}

※ state를 직접 수정해도 변경 가능
array/object의 경우 state는 직접 수정하도록!

 changeName(state){
      state.name = 'park'
    }

 

2) state 변경함수가 여러개 필요할땐?

파라미터문법 사용하기
let user = createSlice({
  name : 'user',
  initialState : {name : 'kim', age : 20},
  reducers : {
    increase(state, a){
      state.age += a.payload
      //파라미터 자리에 넣은 자료들은 a.payload 하면 나옴
    }
  }
})

※ 참고사항

  • a -> action 작명 많이함
  • action.type : state 변경 함수 이름 나옴
  • action.payload : parameter 나옴

3) 파일 분할

코드가 길어서 보기 싫을 땐

강의 코드 중,

let user 변수와 state변경함수 export부분을 store폴더/userSlice.js로 뺌

'프론트엔드로 가는 길 > react' 카테고리의 다른 글

10.Rechart  (0) 2023.04.17
09. localStorage  (0) 2023.02.14
07. 자연스러운 메뉴 만들기  (0) 2022.12.26
06. Ajax  (0) 2022.12.25
05. LifeCycle & UseEffect  (0) 2022.12.24