리액트 생태계에서는 다양한 컴포넌트 구조가 존재하지만
최근 공부하면서 리덕스 사용에 유용한 Dumb 컴포넌트 구조에 대해서 정리해보겠다.
Dumb 컴포넌트 구조는 리덕스 창시자인 Dan Abramov가 고안한 컴포넌트 구조이다.
이 구조론에서는 Presentational Component와 Container Component가 존재한다.
카운터 예제를 통해서 간단한 사용법을 살펴보겠다.
// src/componets/Counter.js
import React from 'react'
export default function Counter({number, onIncrease, onDecrease}) {
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
)
}
// src/containers/CouterContainer.js
import React from 'react'
import { useDispatch, useSelector } from 'react-redux'
import Counter from '../components/Counter'
import { decreaseAsync, increaseAsync } from '../redux/modules/counter';
export default function CounterContainer() {
const number = useSelector(state => state.counter);
const dispatch = useDispatch();
const onIncrease = () => {
dispatch(increaseAsync());
}
const onDecrease = () => {
dispatch(decreaseAsync());
}
return (
<Counter number={number} onIncrease={onIncrease} onDecrease={onDecrease} />
)
}
//src/App.js
import React from 'react'
import CounterContainer from "./containers/CounterContainer";
function App() {
return (
<>
<CounterContainer />
</>
);
}
export default App;
이렇게 App => Container Component => Presentational Component로 관계가 성립된다.
기능적인 부분은 Container에 몰아주고 props로 내려줘서 Presentational Component에서 사용하도록 하는 단순한 구조이다.
지금까지 단순하지만 영향력은 막강한 Dumb Component 구조론에 대해서 살펴보았다.