React-dnd: DropTarget ๋งคํ•‘๊ณผ ํ•จ๊ป˜ redux ์—ฐ๊ฒฐ ์‚ฌ์šฉ

์— ๋งŒ๋“  2016๋…„ 02์›” 09์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: react-dnd/react-dnd

๋†“๊ธฐ ๋Œ€์ƒ์ด๊ธฐ๋„ ํ•œ ๋‚ด ๊ตฌ์„ฑ ์š”์†Œ์— redux๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ž…๋‹ˆ๋‹ค.

export default DropTarget(dragTypes, storyTarget, collect)(connect(mapStateToProps)(StoryEditor));

ํ˜„์žฌ ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ž˜ ๋˜๋Š” ๊ฒƒ ๊ฐ™๊ธด ํ•œ๋ฐ ์ด๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

import { compose } from 'redux'

export default compose(
  DropTarget(dragTypes, storyTarget, collect),
  connect(mapStateToProps)
)(StoryEditor);

๋ชจ๋“  5 ๋Œ“๊ธ€

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

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);
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰