react의 redux!

Posted by : on

Category : myconfused   react


Redux란?

Redux는 애플리케이션의 상태를 중앙에서 관리하는 JavaScript 라이브러리

기본 개념 스토어 (Store): 애플리케이션의 전체 상태를 저장하는 객체. 액션 (Action): 상태 변화를 일으키는 사건을 나타내는 객체입. 액션은 반드시 type 속성을 가져한다. 리듀서 (Reducer): 액션을 처리하여 새로운 상태를 반환하는 함수. 디스패치 (Dispatch): 액션을 스토어에 보내는 함수. 미들웨어 (Middleware): 액션이 리듀서에 도달하기 전에 가로채어 추가 작업을 수행하는 함수.

npm install redux

(1) 액션 생성자 (Action Creator)

액션을 생성

// actions.js
export const increment = () => ({
  type: 'INCREMENT'
});

export const decrement = () => ({
  type: 'DECREMENT'
});

(2) 리듀서 (Reducer)

액션을 처리하여 새로운 상태를 반환하는 함수

// reducers.js
const initialState = { count: 0 };

const counterReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return { count: state.count + 1 };
    case 'DECREMENT':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

export default counterReducer;

(3) 스토어 생성 (Store Creation) 스토어를 생성하고 리듀서를 연결.

// store.js
import { createStore } from 'redux';
import counterReducer from './reducers';

const store = createStore(counterReducer);

export default store;

###(4) 디스패치 액션 (Dispatch Actions) 스토어에 액션을 디스패치하여 상태를 변경

// index.js
import store from './store';
import { increment, decrement } from './actions';

// 상태 변경 구독 (옵션)
store.subscribe(() => console.log(store.getState()));

// 액션 디스패치
store.dispatch(increment()); // count: 1
store.dispatch(increment()); // count: 2
store.dispatch(decrement()); // count: 1

react 에서의 redux

(1) Provider로 애플리케이션 감싸기

Provider 컴포넌트를 사용하여 Redux 스토어를 React 컴포넌트 트리에 제공

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import App from './App';
import store from './store';

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

(2) React 컴포넌트에서 상태와 액션 사용

useSelector와 useDispatch 훅을 사용하여 Redux 상태와 액션을 사용.

// Counter.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement } from './actions';

const Counter = () => {
const count = useSelector((state) => state.count);
const dispatch = useDispatch();

return (
<div>
<p>Count: {count}</p>
<button onClick={() => dispatch(increment())}>Increment</button>
<button onClick={() => dispatch(decrement())}>Decrement</button>
</div>
);
};

export default Counter;

About 유재석
유재석

개발자 유재석 입니다. Web Developer.

Email : jaeseok9405@gmail.com

Website : https://github.com/yoo94