애플리케이션의 상태 관리와 데이터 흐름을 효율적으로 관리하기 위해 설계되었습니다.
구성요소는 Action, Dispatcher, Store, View를 갖고있습니다.
각 요소들은 단방향 흐름에 따라 순서대로 역할을 수행하고, View로부터 새로운 데이터 변경이 생기면 처음부터 다시 위 순서대로 실행합니다.
이렇게 함으로써 예외 없이 데이터를 처리할 수 있게 되었습니다.
// src/actions.js
export const increment = () => {
return {
type: 'INCREMENT'
};
};
// src/reducer.js
const initialState = {
counter: 0
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'INCREMENT':
return {
...state,
counter: state.counter + 1
};
default:
return state;
}
};
export default reducer;
// src/store.js
import { createStore } from 'redux';
import reducer from './reducer';
const store = createStore(reducer);
export default store;
// src/App.js
import React from 'react';
import { connect } from 'react-redux';
import { increment } from './actions';
const App = ({ counter, increment }) => {
return (
<div>
<p>Counter: {counter}</p>
<button onClick={increment}>Increment</button>
</div>
);
};
const mapStateToProps = (state) => {
return {
counter: state.counter
};
};
const mapDispatchToProps = (dispatch) => {
return {
increment: () => dispatch(increment())
};
};
export default connect(mapStateToProps, mapDispatchToProps)(App);