Develop record

[React] Redux 셋팅 / state 만들기 본문

Frontend/React

[React] Redux 셋팅 / state 만들기

seong's log 2024. 3. 26. 00:39

props 없이 state 공유가능

공유가 필요없을 경우 그냥 useState() 사용하기

 

Redux 셋팅

1. 아무위치에 store.js 파일 만들기(state 들을 보관하는 파일)

import { configureStore } from '@reduxjs/toolkit'

export default configureStore({
  reducer: { }
})

 

2. index.js 에서 store.js - import 

3. <Provider store={import해온거}> 으로 <App/> 감싸기 => <App> + 모든 자식 컴포넌트에서 store.js 에 있는 state 사용가능

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

root.render(
  <React.StrictMode>
    <Provider store={store}>
      <BrowserRouter>
      <App />
      </BrowserRouter>
    </Provider>
  </React.StrictMode>
);

 

state 사용법

1. store 에 state 보관

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

//useState() 의 역할
// state 하나 : slice
// 변수에 담기
let 변수명 = createSlice({
  name : 'state 이름',
  initialState : 'state 값' => state 값 : array, object 다 가능
})

let stock = createSlice({
  name : 'stock',
  initialState : '[10,11,12]'

})

export default configureStore({
  // 만들어진 state 를 reducer 안에 등록해야 사용가능
  reducer: { 
	작명 : 변수명.reducer   // 모든 컴포넌트에서 state 사용가능
  }
})

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

 

2. 컴포넌트에서 state 사용하기(cart.js)

useSelector((state) => { return state }) : 모든 state 가져오기

useSelector((state) => { return state.state명 }) : 특정 state 가져오기

{ return } 생략가능 ---> ex) useSelector((state) => state ) 

import { Table } from "react-bootstrap";
import { useSelector } from "react-redux";

function Cart(){
	
    // store 에 있던 모든 state를 가져옴
    let a = useSelector((state)=>{return state}) 
    // object 형태로 저장되기 때문에 변수명.reducer에 저장한 state명으로 출력가능
    console.log(a.user)
    
    // store 에 있는 user state 만 가져오기
    let a = useSelector((state)=>{return state.user}) 
    
    return(
    )
}

 

3. Redux store 활용

store.js

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


let first = createSlice({
  name : 'first',
  initialState : [0,'White and Black',2]
})
  
let second = createSlice({
  name : 'second',
  initialState : [2,'Grey Yordan',1],
})

export default configureStore({
  reducer: { 
    first : first.reducer,
    second : second.reducer
  }
})

 

cart.js

import { Table } from "react-bootstrap";
import { useSelector } from "react-redux";

function Cart(){

    let product = useSelector((state)=>{return state})
    return(
        <div>
            <Table>
                <thead>
                    <tr>
                        <th>id</th>
                        <th>상품명</th>
                        <th>수량</th>
                        <th>변경하기</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        {
                            product.first.map(function(a,i){
                                return(
                                    <td>{a}</td>
                                )
                            })
                        }
                        <td>안녕</td>
                    </tr> 
                    <tr>
                    {
                            product.second.map(function(a,i){
                                return(
                                    <td>{a}</td>
                                )
                            })
                        }
                        <td>안녕</td>
                    </tr>
            </tbody>
        </Table> 
      </div>
    )
}

export default Cart;

 

4. 수정 코드

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

let cart = createSlice({
  name : 'cart',
  initialState : [
  {id : 0, name : 'White and Black', count : 2},
  {id : 2, name : 'Grey Yordan', count : 1}]
})


export default configureStore({
  reducer: { 
    cart : cart.reducer
  }
})
import { Table } from "react-bootstrap";
import { useSelector } from "react-redux";

function Cart(){

    let cart = useSelector((state)=>{return state})
    return(
        <div>
            <Table>
                <thead>
                    <tr>
                        <th>id</th>
                        <th>상품명</th>
                        <th>수량</th>
                        <th>변경하기</th>
                    </tr>
                </thead>
                <tbody>
                    
                        {
                            cart.cart.map(function(a,i){
                                return(
                                    <tr>
                                    <td>{a.id}</td>
                                    <td>{a.name}</td>
                                    <td>{a.count}</td>
                                    <td>안녕</td>
                                    </tr> 
                                )
                               
                            })
                        }                   
            </tbody>
        </Table> 
      </div>
    )
}

export default Cart;

'Frontend > React' 카테고리의 다른 글

[React] react - query , lazy, suspend  (0) 2024.03.31
[React] Redux state 변경  (0) 2024.03.29
[React] Context API  (0) 2024.03.26
[React] 애니메이션-transition  (0) 2024.03.25
[React] tab UI  (0) 2024.03.25