ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Redux기초]Redux 사용하기
    React 2023. 4. 17. 21:37

    유데미 강좌를 통해 작성하였습니다.

    간단한 counter증가 예제를 통해 리덕스의 흐름을 복습.

     

     

    리덕스를 사용하기 위해 라이브러리를 설치해준다.

    npm install redux react-redux

    1.Store 생성하기

    Store는 전역 상태를 저장하는 공간이다. 리덕스에서 Store는 하나만 존재해야 한다.

    여러개의 스토어를 사용할 수는 있지만, 그럼 개발 도구를 활용해 상태를 추적할 수 없게 된다.

    store는 reducer를 인자로 받는다. 현재 createStore를 사용하면 취소선이 그어지는데,

    리덕스에서 리덕스 툴킷의 configureStore를 쓰길 권장하고 있기 때문이다.

    기능상의 문제는 전혀 없으니 사용해도 괜찮지만, 취소선을 없애고 싶다면..

    -RTX configureStore를 사용한다.

    -as를 통해 이름을 바꿔서 사용한다.

     

     

    2.reducer 생성하기

    리듀서는 저장소의 변화를 주는 순수한 함수이다. 저장소(store)에 접근해 action객체를 전달한다. 

    이전 상태를 절대 변화시키지않고 새로운 상태를 반환해야한다.

    state와 action을 매개변수로 받는다. 

    const initialState ={
    	counter:0,
    }
    
    const counterReducer = (state = initialState,action){
    	switch(action.type){
        	case 'increase':
            	return{
                	counter:state.counter+1
                }
            case 'decrease':
            	return{
                	counter:state.counter-1
                }
        }
    }

     

    reducer를 store에 넣어주고 export해준다.

    const store = createStore(counterReducer);
    export default store;

     

    3.Store를 제공하기

    store를 만들고 모든 컴포넌트에 접근 할 수 있도록 컴포넌트의 최상단 index.js로 이동해준다.

    Provider를 react-redux로부터 import해준다. 

    context에서 Provider로 감싸준것과 비슷하게 Redux도 컴포넌트들이 Store에 접근할 수 있도록 Provider를 사용한다.

     

    4.Store 구독하기

    store를 가져와서 상태를 불러오기 위해 useSelector를 사용할 수 있다.

    이 hook은 매개변수로 함수를 받고 상태 객체 전체에서 일부분만 쉽게 잘라내서 가져올 수 있다.

    const counter = useSelector(state =>state.counter);

    store를 가져오기 위한 방법

    • useStore : Redux스토어에 대한 완전한 엑세스를 제공한다.
    • useSelector : 스토어의 특정 부분의 상태만 가져올 수 있는 간단한 방법을 제공한다.
    • connect : 클래스형 함수에서는 hook을 사용할 수 없으므로 connect를 사용한다. 

     

    5.action 전달하기

    상태에 어떠한 변화를 줘야한다면 리듀서에 action 을 전달해서 바꿀 수 있다.

    액션 객체는 type을 필수적으로 갖는다.액션을 전달할 때는 useDispatch를 호출하여 전달할 수 있다.

      const dispatch = useDispatch();
      
    const incrementHandler = () => {
      dispatch({ type: "increment" });
    };

     

    💡액션 생성자 함수

    액션 생성자 함수는 액션 객체를 생성하는 함수이다.  이것을 이용하면 코드가 간결해지며 객체의 구조를 일관되게 유지할 수 있다.

    
    // action creator
    const INCREASE = 'INCREASE';
    const DECREASE = 'DECREASE';
    
    const increment = (amount) => {
    	return {type: INCREMENT};
    };
    const decrement = ()=>{
    	return {type : DECREASE}
    }
    //reducer
    function reducer(state = initialState, action) {
      switch (action.type) {
        case INCREASE:
          return {
            counter: state.counter + 1
          };
        case DECREASE:
          return {
            counter: state.counter - 1
          };
        default:
          return state;
      }
    }
    
    //counter.js
    const incrementHandler = () => {
      dispatch(increment());
    };
    const decrementHandler = () => {
      dispatch(decrement());
    };

     

    💡액션의 payload

    액션 객체는 반드시 type속성을 갖는다고 했다. 그 외  추가 정보를 주기 위해 payload라는 속성을 사용 할 수 있다.

    //counter.js
    const increaseHandler =()=>{
      dispatch({type:'increase',value:5})
    }
    
    //reducer
    const counterReducer = (state = initialState,action){
    	switch(action.type){
        	case 'increase':
            	return{
                	counter:state.counter+action.value
                }
        }
    }
    
    
    
    
    //생성자 함수의 payload
    const increment = (amount) => {
      return {
        type: 'INCREMENT',
        payload: {
          amount
        }
      };
    //dispatch하기
    dispatch(increment(5));

     

     

     

    'React' 카테고리의 다른 글

    [Hooks]useReducer  (0) 2023.06.19
    [Hooks]useEffect  (0) 2023.06.19
    [Redux기초]리덕스 기초 개념  (0) 2023.04.13
    [리액트 기초]context 사용법  (0) 2023.04.01
    [리액트]portal  (0) 2023.03.31
Designed by Tistory.