๋๊ธฐ ๋์์ด๊ธฐ๋ ํ ๋ด ๊ตฌ์ฑ ์์์ redux๋ฅผ ์ฐ๊ฒฐํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅ ์ค์ ๋๋ค.
export default DropTarget(dragTypes, storyTarget, collect)(connect(mapStateToProps)(StoryEditor));
ํ์ฌ ์ด๋ ๊ฒ ์ฐ๊ฒฐํ๊ณ ์๋๋ฐ ์ ๋๋ ๊ฒ ๊ฐ๊ธด ํ๋ฐ ์ด๊ฒ ๋ง๋์ง ํ์ธํ๊ณ ์ถ์์ต๋๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ ๊ฒ์ ๋๋ค :
import { compose } from 'redux'
export default compose(
DropTarget(dragTypes, storyTarget, collect),
connect(mapStateToProps)
)(StoryEditor);
React DnD ๋ฌธ์์์ @gaearon ์ _.flow๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์์ ์์ค ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ ์์๋ฅผ ์ฅ์ํฉ๋๋ค. ๊ทธ๋์ ๋ด๊ฐ ์ด ๊ธ์ ์ ๋๋ก ์ฝ๊ณ ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ค์ ๋ก redux์ compose
ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ต๋๊น?
@ekeric13 Redux์ compose
๋ ์ธ์๊ฐ ๋ฐ๋์ธ _.flow
์ ๋์ผํฉ๋๋ค. ๊ทธ๊ฑด,
compose(f, g, h)(x) === flow(h, g, f)(x) === f(g(h(x)))
@gaearon compose
์ฌ์ฉํ๋ฉด ์ ์๋ํ์ง๋ง compose
๋ํ ๋ฌธ์์์ compose์ ์ ๋ฌ๋ ๋๋ถ๋ถ์ ํจ์๋ ๋จ์ผ ๋งค๊ฐ๋ณ์๋ฅผ ์์ํด์ผ ํ์ง๋ง ์ธ ๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค๊ณ ๋งํฉ๋๋ค. DropTarget
. ์ด๊ฒ์ด ์๋ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌ์ฑํฉ๋๋ค.
์ด๊ฒ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ ํธ๋ฆฌํฐ์ด๋ฉฐ ํธ์์ Redux์ ํฌํจ๋์ด ์์ต๋๋ค.
์ฌ๋ฌ ์์ ๊ฐํ์ ๋ฅผ ์ฐ์์ผ๋ก ์ ์ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ธ์
(์ธ์): ๊ตฌ์ฑํ ํจ์์ ๋๋ค. ๊ฐ ํจ์๋ ๋จ์ผ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ฝํด์ผ ํฉ๋๋ค. ๋ฐํ ๊ฐ์ ์ผ์ชฝ์ ์๋ ํจ์์ ๋ํ ์ธ์๋ก ์ ๊ณต๋๋ ์์ ๋๋ค. ๊ฒฐ๊ณผ๋ก ์์ฑ๋ ํจ์์ ๋ํ ์๋ช ์ ์ ๊ณตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ ์ ์๋ ๋งจ ์ค๋ฅธ์ชฝ ์ธ์๋ ์์ธ์ ๋๋ค.
BuilderArea.propTypes = {
addPanel: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
panels: state.panels
});
export default compose(
DropTarget(Types.PANEL_CARD, builderAreaTarget, (connect, monitor) => ({
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver()
})),
connect(
mapStateToProps,
{ addPanel }
)
)(BuilderArea);
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ ๊ฒ์ ๋๋ค :