ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Redux (props 하기 귀찮을 때)
    React 2022. 3. 23. 14:08

    App.js파일에서 Cart.js라는 파일로 데이터를 옮길 때 props가 귀찮으면 redux가 있다.

    Redux란 props 없이 모든 컴포넌트가 state를 갖다쓰기 가능하게 한다.

     

    먼저, 설치를 해보자

    npm install redux react-redux
    //yarn add redux react-redux

    설치한 후에, index.js에 들어가서 기본 셋팅을 해주어야 한다.

    import {Provider} from 'react-redux';
    import { createStore } from 'redux';
    
    let store = createStore(()=>{ return [{ id : 0, name : '멋진신발', quan : 2 }] });
    
    ReactDOM.render(
      <React.StrictMode>
        <BrowserRouter>
          <Provider store={store}>
            <App />
          </Provider>
        </BrowserRouter>
      </React.StrictMode>,
      document.getElementById('root')
    );

    Provider을 import해주고 <App />을 <Provider></Provider>로 감싸준다. 그 다음에 , createStore()안에 state를 저장해야한다. 그러면서 import {createStore} from 'redux'를 해주고 createStore안에 return을 써서 반환할 state초깃값을 만든다. 그 다음에, props처럼 Provider태그에 store={store}써서 보내주면 된다. 

     

    이제 Cart.js로 가서 사용해보자. Cart.js는 표하나를 만들어 놓은 상태이다.

    import React from 'react';
    import { Table } from 'react-bootstrap';
    
    function Cart() {
        return (
            <div>
                <Table responsive>
                    <tr>
                        <th>#</th>
                        <th>상품명</th>
                        <th>수량</th>
                        <th>변경</th>
                    </tr>
                    <tr>
                        <td>1</td>
                        <td>Table cell</td>
                        <td>Table cell</td>
                        <td>Table cell</td>
                    </tr>
                </Table>
            </div>
        )
    }
    
    export default Cart;

    store에 있는 state 쓰려면 function을 만들고 export default connect()()을 써야한다.

    import { connect } from 'react-redux';
    //function Cart () {} 밑에다가
    
    function 함수명(state) {
    	return {
        	상품명 : state[0].name //state중에 name이라고 있으면 상품명으로 바꿔주세요 같은 느낌
            //여기서 이름구체화가 귀찮으면 state : state라쓰고 쓸때 state[0].name으로 써도 됨
            ,수량 : state[0].quan
        }
    }//store안에 있던 state들을 가져와 props로 변환해주는 함수
    export default connect(함수명)(Cart)

    즉, 위의 과정들은 state를 props화 시킨다.

    사용할 땐,

    function Cart(props) {
        return (
            <div>
                <Table responsive>
                    <tr>
                        <th>#</th>
                        <th>상품명</th>
                        <th>수량</th>
                        <th>변경</th>
                    </tr>
                    <tr>
                        <td>1</td>
                        <td>{props.상품명}</td>
                        <td>{props.수량}</td>
                        <td></td>
                    </tr>
                </Table>
            </div>
        )
    }

    props화 시켰으므로 props.상품명으로 사용하면된다.

     

    즉, 깊은 하위컴포넌트들도 props여러번 전송없이 state를 직접 갖다쓸 수 있음.

    'React' 카테고리의 다른 글

    Redux state와 reducer 더 만들기  (0) 2022.03.23
    Redux reducer와 dispatch로 데이터 수정  (0) 2022.03.23
    Tab UI / Animation  (0) 2022.03.22
    props 대신 Context API  (0) 2022.03.22
    만든 리액트 사이트 build해서 github배포  (0) 2022.03.22

    댓글

Designed by Tistory.