React-dnd: μ—¬λŸ¬ μš”μ†Œ λ“œλž˜κ·Έ 지원

에 λ§Œλ“  2014λ…„ 10μ›” 25일  Β·  30μ½”λ©˜νŠΈ  Β·  좜처: react-dnd/react-dnd

κΈ°λ³Έ λ“œλž˜κ·Έ μ•€ λ“œλ‘­μœΌλ‘œ κ΅¬ν˜„ν•˜κΈ° μ–΄λ €μš΄ 일반적인 νŒ¨ν„΄μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ μš”μ†Œλ₯Ό λ“œλž˜κ·Έν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 선택 λ©”μ»€λ‹ˆμ¦˜μ€ μ•±λ§ˆλ‹€ λ‹€λ₯Ό 수 μžˆμ§€λ§Œ(cmd+클릭, μ²΄ν¬λ°•μŠ€, 사전 μ •μ˜λœ κ·Έλ£Ή), 적어도 이 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ§€μ›ν•˜λ„λ‘ _κ°€λŠ₯_ν•˜κ²Œ λ§Œλ“œλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

screen shot 2014-10-26 at 1 07 07

μ—¬λŸ¬ 개의 λ“œλž˜κ·Έ ν•­λͺ©μ΄ DOMμ—μ„œ ν˜•μ œκ°€ 아닐 수 있고 setDragImage(element, x, y) κ°€ 거의 λ―Έμ³€κ³  더 λ‚˜μ•„μ§€μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— λ“œλž˜κ·Έ λ―Έλ¦¬λ³΄κΈ°μ—μ„œ ν•œ λ²ˆμ— μ—¬λŸ¬ μš”μ†Œλ₯Ό λ Œλ”λ§ν•˜λŠ” 데 뢀담을 갖지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

"닀쀑" λ“œλž˜κ·Έ 미리보기λ₯Ό ν‘œμ‹œν•  수 μ—†λŠ” 경우 이 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 데 μ–΄λ–»κ²Œ 도움을 쀄 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ–΄λ–€ λ©΄μ—μ„œ 이 μ‹œλ‚˜λ¦¬μ˜€λŠ” 이미 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ†ŒλΉ„μžλŠ” μ„ νƒν•œ μš”μ†Œλ₯Ό μˆ˜λ™μœΌλ‘œ μΆ”μ ν•˜κ³  dragPreview λ₯Ό μΌμ’…μ˜ 일반 자리 ν‘œμ‹œμž Image 둜 μ„€μ •ν•˜κ³  μ‚­μ œμ— μ μ ˆν•˜κ²Œ λŒ€μ‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 논리 κ΄€λ ¨) μ—¬λŸ¬ μš”μ†Œ.

κ·ΈλŸ¬λ‚˜ ν˜„μž¬ ν•œ μš”μ†Œκ°€ λ“œλž˜κ·Έλ˜λŠ” 그룹의 μΌλΆ€λΌλŠ” 것을 μ•Œ 수 μžˆλŠ” 방법이 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. react-dnd의 κ΄€μ μ—μ„œ μš°λ¦¬κ°€ 무언가λ₯Ό λ“œλž˜κ·Έν•˜λ©΄ 이 μ»΄ν¬λ„ŒνŠΈλŠ” getDragState(type).isDragging = true λ₯Ό μ–»μ§€λ§Œ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. μ•± κ΄€μ μ—μ„œ 닀쀑 선택을 μ§€μ›ν•˜λŠ” 경우 λ…Όλ¦¬μ μœΌλ‘œ "μ„ νƒλœ" λͺ¨λ“  ν•­λͺ©μ΄ λ“œλž˜κ·Έλ˜κ³  μžˆμŒμ„ μΈμ‹ν•˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€. 심지어 κ·Έ 쀑 ν•˜λ‚˜λ§Œ μ‹€μ œλ‘œ "DOM으둜 λ“œλž˜κ·Έ"λ˜λŠ” κ²½μš°μ—λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

μš°λ¦¬μ—κ²Œ ν•„μš”ν•œ 것은 ꡬ성 μš”μ†Œκ°€ react-dnd에 "이봐, onDragStart κ°€ λ‹€λ₯Έ ꡬ성 μš”μ†Œμ— μ˜ν•΄ μˆ˜μ‹ λ˜μ—ˆμ§€λ§Œ λ‚˜λ„ λŒλ €κ°€κ³  μžˆλŠ” μ²™ν•˜κ³  λ‚΄ getDragState(type) λ―ΈλŸ¬λŠ” ꡬ성 μš”μ†Œμ˜ getDragState(type) λ“œλž˜κ·Έν•˜κ³  λ‚΄ endDrag(didDrop) ν˜ΈμΆœν•˜λ„λ‘ ν•˜μ—¬ λ‚΄ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€."

ꡬ성 μš”μ†ŒλŠ” μ–΄λ–»κ²Œ μ„ νƒν•©λ‹ˆκΉŒ?

design decisions

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

관심 μžˆλŠ” μ‚¬λžŒμ΄ 있으면 닀쀑 λ“œλž˜κ·Έ/κ·Έλ¦¬λ“œ 보기λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€: https://codesandbox.io/s/9j897k0mwy.
cmd/ctrl 및 Shift ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν•­λͺ©μ„ μ„ νƒν•œ λ‹€μŒ κ·Έλ¦¬λ“œ μ£Όμœ„λ‘œ λ“œλž˜κ·Έν•˜μ—¬ 아무 κ³³μ—λ‚˜ μ‚½μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 μ—¬μ „νžˆ ​​데λͺ¨μ΄μ§€λ§Œ μ½”λ“œλ₯Ό 쑰금 더 μΆ”μƒν™”ν•˜κ³  λ‚˜μ€‘μ— ꡬ성 μš”μ†Œμ— νŒ¨ν‚€μ§•ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  30 λŒ“κΈ€

μš°μ„ μˆœμœ„κ°€ μ•„λ‹™λ‹ˆλ‹€. λ“œλž˜κ·Έ μ†ŒμŠ€ ν‚€λ₯Ό λ„μž…ν•œ ν›„ μž¬λ°©λ¬Έν•  수 μžˆμŠ΅λ‹ˆλ‹€(https://github.com/gaearon/react-dnd/issues/38#issuecomment-73409935).

λ‚˜λŠ” 당신이 dragSourceκ°€μžˆλŠ” ꡬ성 μš”μ†Œλ‘œ ꡬ성 μš”μ†Œ 트리의 μ„Ήμ…˜μ„ λž˜ν•‘ ν•  수 μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ•žμœΌλ‘œ 이것에 관심을 κ°€μ§ˆ κ²ƒμž…λ‹ˆλ‹€ ...
Shift ν‚€λ₯Ό λˆ„λ₯Έ μƒνƒœμ—μ„œ ν΄λ¦­ν•˜λ©΄ λ°°μ—΄μ˜ μ–΄λ–€ μ„Ήμ…˜μ΄ dragItem 등에 λ³΅μ‚¬λ˜λŠ”μ§€ ν™•μž₯λ©λ‹ˆλ‹€.

μ’€.

λ¨Όμ € null component (#38에 ν•„μš”)와 λ™μΌν•œ key (#53에 ν•„μš”)λ₯Ό 가진 λ‹€λ₯Έ ꡬ성 μš”μ†Œλ₯Ό μ „λ‹¬ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€.

그런 λ‹€μŒ 선택 사항인 groupKey λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. key 와 같이 λ“œλž˜κ·Έ μ†ŒμŠ€μ— μ§€μ •λ˜λ©° λ¬Έμžμ—΄μž…λ‹ˆλ‹€. groupKey μ‚¬μš©ν•˜μ—¬ 무언가λ₯Ό λ“œλž˜κ·Έν•˜κΈ° μ‹œμž‘ν•˜λ©΄ 호좜자뿐만 μ•„λ‹ˆλΌ λ™μΌν•œ groupKey μ‚¬μš©ν•˜μ—¬ 마운트된 λͺ¨λ“  λ“œλž˜κ·Έ μ†ŒμŠ€μ—μ„œ beginDrag ν˜ΈμΆœν•˜κ³  ν•­λͺ©μ„ λ‹€μŒμœΌλ‘œ μˆ˜μ§‘ν•©λ‹ˆλ‹€. λ°°μ—΄. item λŒ€μ‹  μ΄λŸ¬ν•œ ν•­λͺ©μ„ μ „λ‹¬ν•˜μ—¬ λŒ€μƒ λ©”μ„œλ“œλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. λ“œλž˜κ·Έκ°€ λλ‚˜λ©΄ ν•­λͺ© 배열을 μ‚¬μš©ν•˜μ—¬ λ“œλ‘­ λŒ€μƒμ—μ„œ acceptDrop λ₯Ό ν˜ΈμΆœν•œ λ‹€μŒ ν•΄λ‹Ή ν•­λͺ©κ³Ό ν•¨κ»˜ 각 λ“œλž˜κ·Έ μ†ŒμŠ€μ˜ endDrag λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

μž¬λ―ΈμžˆλŠ” 점은 μš°λ¦¬κ°€ items.length 의 카운트λ₯Ό μ•Œκ³  있기 λ•Œλ¬Έμ— μ‚¬μš©μž μ •μ˜ "볡합" 썸넀일 ꡬ성 μš”μ†Œμ™€ μœ„μ—μ„œ μŠ€ν¬λ¦°μƒ·κ³Ό 같은 μΉ΄μš΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ DragLayer λ₯Ό 그릴 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚΄κ°€ μƒκ°ν–ˆλ˜ 것보닀 훨씬 덜 μΆ”ν•œ 생각이야

:+1: 이 κΈ°λŠ₯을 μœ„ν•΄ :-)

λ‹«μŠ΅λ‹ˆλ‹€. ν˜„μž¬ 이에 λŒ€ν•œ μ‚¬μš© 사둀가 μ—†μœΌλ©° μƒλ‹Ήν•œ κ΅¬ν˜„ λ…Έλ ₯이 ν•„μš”ν•©λ‹ˆλ‹€.

@gaearon

μ €λŠ” μ˜ˆμ „μ— Java/Swing DnDλ₯Ό μ‚¬μš©ν–ˆκ³ , μ•„λ§ˆ 이 문제λ₯Ό ν•΄κ²°ν•˜κ³  맀우 μ„Έλ ¨λ˜κ³  맀우 일반적이며 μœ μ—°ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ³ μ•ˆν•œ 개발자 κ΅°λŒ€κ°€ μžˆμ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. λ‚˜λŠ” 였래된 λ°μŠ€ν¬νƒ‘ ν”„λ ˆμž„μ›Œν¬κ°€ 이와 같은 쒋은 DnD ν”„λ ˆμž„μ›Œν¬λ₯Ό λ§Œλ“œλŠ” 데 μžˆμ–΄ λͺ¨λ“  μ–΄λ €μš΄ 문제λ₯Ό ν•΄κ²°ν–ˆμ„ κ²ƒμ΄λ―€λ‘œ μ—°κ΅¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

Java/Swingμ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법은(λ“œλž˜κ·Έ 이미지에 λŒ€ν•œ λ‚΄μž₯ 지원이 μ—†μ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³ ) _트리 λ·° 자체λ₯Ό λ“œλž˜κ·Έ μ†ŒμŠ€λ‘œ λ§Œλ“€κ³  _이λ₯Ό 기반으둜 λ“œλž˜κ·Έλ₯Ό μ‹œμž‘ν•΄μ•Ό ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•  수 있게 ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ μƒνƒœ 및 λ“œλž˜κ·Έ μ‹œμž‘ μœ„μΉ˜_. canDrag 및 beginDrag 호좜 μ‹œ monitor.getInitialSourceClientOffset() μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ‚¬λžŒλ“€μ€ λΆ„λͺ…νžˆ 그것을 μ‚¬μš©ν•  수 있기λ₯Ό 원할 κ²ƒμž…λ‹ˆλ‹€. 그듀은 λ˜ν•œ μˆ˜μ •μž ν‚€(ctrl, alt, shift)λ₯Ό μ‚¬μš©ν•  수 있고 λ“œλž˜κ·Έ μ†ŒμŠ€μ—μ„œ 이동 λ˜λŠ” 볡사 μ—¬λΆ€λ₯Ό μ§€μ •ν•˜κ³  λŒ€μƒμ„ 놓기λ₯Ό 원할 κ²ƒμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μš”μ†ŒλŠ” Java/Swingμ—μ„œ κ°€λŠ₯ν•˜κ³  λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ₯Ό μΆ”μΈ‘ν•˜κ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. Swingμ—λŠ” ꡐ체할 수 μžˆλŠ” _λ“œλž˜κ·Έ 제슀처 인식기_ κ°œλ…λ„ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λͺ©λ‘μ˜ λͺ¨λ“  ν•­λͺ©μ„ κ°œλ³„ λ“œλž˜κ·Έ κ°€λŠ₯으둜 μ²˜λ¦¬ν•˜λŠ” 것은 λͺ©λ‘ ꡬ성 μš”μ†Œκ°€ μ„ νƒν•œ ν•­λͺ©μ— 따라 ꡬ성할 λ“œλ‘­ νŽ˜μ΄λ‘œλ“œ/미리 보기 μ΄λ―Έμ§€μ˜ μ’…λ₯˜λ₯Ό νŒŒμ•…ν•˜λŠ” 단일 λ“œλž˜κ·Έ μ†ŒμŠ€κ°€ λ˜λŠ” 것과 비ꡐ할 λ•Œ μ–΄λ €μšΈ 것이라고 μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.

λ˜ν•œ κ°œλ°œμžκ°€ _μ‚¬μš©μžκ°€ ν΄λ¦­ν•˜κ³  λŒμ–΄μ˜¨ ν•­λͺ©μ„ κΈ°μ€€μœΌλ‘œ λ“œλž˜κ·Έλ˜λŠ” ν•­λͺ©μ˜ μˆœμ„œλ₯Ό λ³€κ²½ν•˜κΈ°λ₯Ό 원할 μˆ˜λ„ μžˆλ‹€λŠ” 점을 κ³ λ €ν•˜μ‹­μ‹œμ˜€._ μ €λŠ” Windows 탐색기가 μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ react-dndλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν•­λͺ© 끌기λ₯Ό κ΅¬ν˜„ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 이에 λŒ€ν•œ ν˜„μž¬ μ†”λ£¨μ…˜μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

단일 λ“œλž˜κ·Έ μ†ŒμŠ€μ— λŒ€ν•΄ μ—¬λŸ¬ λ“œλ‘­ λŒ€μƒμ„ μ˜λ―Έν–ˆμŠ΅λ‹ˆκΉŒ?

+1 @danii1 : μ—¬λŸ¬ ν•­λͺ©μ„ λ“œλž˜κ·Έν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” 그것을 κ΅¬ν˜„ν–ˆκ³  μ†”λ£¨μ…˜μ€ 기본적으둜 첫 번째 κ²Œμ‹œλ¬Όμ— μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  1. μ„ νƒν•œ ν•­λͺ© 좔적
  2. CustomDragLayerλ₯Ό κ΅¬ν˜„ν•˜κ³ (https://gaearon.github.io/react-dnd/docs-drag-layer.html μ°Έμ‘°) μ„ νƒν•œ ν•­λͺ©μ„ 직접 λ Œλ”λ§ν•©λ‹ˆλ‹€.
  3. λ“œλ‘­λœ ν•­λͺ©μ΄ 선택 ν•­λͺ©μ˜ 일뢀인 경우 λ“œλ‘­ 처리

λ‚˜λŠ” 그것을 λ‹€μŒκ³Ό 같이 κ΅¬ν˜„ν–ˆλ‹€.

  1. μ„ΈνŠΈμ—μ„œ μ„ νƒν•œ ν•­λͺ© 좔적
  2. 이것을 dnd Source에 μ†μ„±μœΌλ‘œ μ „λ‹¬ν•˜μ‹­μ‹œμ˜€.
  3. beginDragμ—μ„œ propsμ—μ„œ Set을 κ²€μƒ‰ν•˜κ³  λ“œλž˜κ·Έ ν•­λͺ©μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  4. μ‚¬μš©μž 지정 λ“œλž˜κ·Έ 미리보기 λ§Œλ“€κΈ°
  5. EndDragμ—μ„œ Set의 λͺ¨λ“  ν•­λͺ©μ„ dnd Target으둜 μ΄λ™ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λŒ€ν•΄ μ•½κ°„ λ‹€λ₯Έ μ‚¬μš© 사둀가 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ“œλž˜κ·Έν•  수 μ—†λŠ” κ°€μž₯자리둜 λ“œλž˜κ·Έν•  수 μžˆλŠ” λ…Έλ“œλ₯Ό 그리고 μ‹Άμ§€λ§Œ λ…Έλ“œκ°€ μ΄λ™ν•˜κΈ° μœ„ν•΄ 연결될 λ•Œ μ΄λ™ν•˜λŠ” λ…Έλ“œλ₯Ό 그리고 μ‹ΆμŠ΅λ‹ˆλ‹€. λ‚΄ ν˜„μž¬ κ΅¬ν˜„μ€ DraggableNode κ°€ μ›€μ§μ΄λŠ” 것을 감지할 λ•Œ κ°€μž₯자리λ₯Ό κ·Έλ¦¬λŠ” CustomDragLayer μž…λ‹ˆλ‹€( CustomDragLayer 에도 κ·Έλ €μ§€μ§€λ§Œ λͺ¨λ“  κ°€μž₯자리λ₯Ό isDragging() κ΅¬ν˜„ν•˜μ—¬ λͺ¨λ“  κ°€μž₯자리λ₯Ό DragSources둜 κ΅¬ν˜„ν•˜μ—¬ μ—°κ²°λœ λ…Έλ“œκ°€ μ›€μ§μ΄λŠ”μ§€ κ°μ§€ν•˜μ—¬ CustomDragLayer κ°€ μ’Œν‘œλ₯Ό μ†Œν’ˆμœΌλ‘œ μ‚½μž…ν•˜λŠ” λŒ€μ‹  슀슀둜 그릴 수 μžˆλ„λ‘ ν•˜μ—¬ 닀쀑 λ“œλž˜κ·Έ 상황 .

@danii1
참쑰용으둜 κ΅¬ν˜„ν•œ 것을 κ³΅μœ ν•΄ μ£Όμ‹€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•˜κ³  react-dnd + reduxλ₯Ό μ‚¬μš©ν•˜μ—¬ 닀쀑 및 쀑첩 λ“œλž˜κ·Έ μ•€ λ“œλ‘­μ— λŒ€ν•œ 리포지토리λ₯Ό μΆ”κ°€ν•  κ²ƒμž…λ‹ˆλ‹€.

@nayemmajhar , 그것은 쒋을 κ²ƒμž…λ‹ˆλ‹€

@nayemmajhar 이것에 λŒ€ν•œ μ˜ˆμ— λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

μ €λŠ” μ˜€λž˜μ „μ— reduxJS와 ν•¨κ»˜ react DnDλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. https://www.joomshaper.com/page-builder νŠœν† λ¦¬μ–Όμ„ μž‘μ„± μ€‘μ΄μ§€λ§Œ κ²Œμ‹œν•  μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€

@serle 이 μž‘μ—…μ„ μˆ˜ν–‰ν•œ 방법에 λŒ€ν•œ μ½”λ“œ 예제λ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@ianmclean2011 μ—¬κΈ°μ—μ„œ ν™•μΈν•˜μ„Έμš”: https://github.com/react-dnd/react-dnd/issues/590

https://react-dnd.github.io/react-dnd/examples-sortable-simple.html 의 μ •λ ¬ κ°€λŠ₯ν•œ μ˜ˆμ œμ™€ μœ μ‚¬ν•œ μ˜ˆμ œμ—μ„œ 닀쀑 λ“œλž˜κ·Έλ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•©λ‹ˆλ‹€

관심 μžˆλŠ” μ‚¬λžŒμ΄ 있으면 닀쀑 λ“œλž˜κ·Έ/κ·Έλ¦¬λ“œ 보기λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€: https://codesandbox.io/s/9j897k0mwy.
cmd/ctrl 및 Shift ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν•­λͺ©μ„ μ„ νƒν•œ λ‹€μŒ κ·Έλ¦¬λ“œ μ£Όμœ„λ‘œ λ“œλž˜κ·Έν•˜μ—¬ 아무 κ³³μ—λ‚˜ μ‚½μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 μ—¬μ „νžˆ ​​데λͺ¨μ΄μ§€λ§Œ μ½”λ“œλ₯Ό 쑰금 더 μΆ”μƒν™”ν•˜κ³  λ‚˜μ€‘μ— ꡬ성 μš”μ†Œμ— νŒ¨ν‚€μ§•ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@melvynhills μ„ νƒν•œ λͺ¨λ“  μΉ΄λ“œλ₯Ό 각 μΉ΄λ“œ ꡬ성 μš”μ†Œμ— 전달할 ν•„μš”κ°€ μ—†λŠ” μ†”λ£¨μ…˜μ„ μ‘°μ‚¬ν•œ 적이 μžˆμŠ΅λ‹ˆκΉŒ? μΉ΄λ“œμ˜ beginDrag()κ°€ μ„ νƒν•œ λͺ¨λ“  μΉ΄λ“œμ— λŒ€ν•œ μ°Έμ‘°λ₯Ό ν•„μš”λ‘œ ν•œλ‹€λŠ” 점을 κ³ λ €ν•˜λ©΄ μ†”λ£¨μ…˜μ΄ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@jmcrthrs μ•„λ‹ˆμš”, react-dnd API

@melvynhills @jmcrthrs λ‚΄κ°€ μ‚¬μš©ν•œ λ‹€λ₯Έ λ°μŠ€ν¬νƒ‘ dnd ν”„λ ˆμž„μ›Œν¬λŠ” 각각의 κ°œλ³„ ν–‰, μ…€, ν•­λͺ© 등을 자체 λ“œλž˜κ·Έ μ†ŒμŠ€ 및/λ˜λŠ” λ“œλ‘­ λŒ€μƒμœΌλ‘œ λ§Œλ“œλŠ” λŒ€μ‹  λͺ©λ‘κ³Ό ν…Œμ΄λΈ”μ„ λ“œλž˜κ·Έ μ†ŒμŠ€/λ“œλ‘­ λŒ€μƒμœΌλ‘œ λ§Œλ“œλŠ” 데 μ˜μ‘΄ν•©λ‹ˆλ‹€. μ—¬λŸ¬ ν•­λͺ©μ„ λ“œλž˜κ·Έν•˜κ³  λͺ©λ‘μ΄λ‚˜ ν…Œμ΄λΈ” λ‚΄μ—μ„œ νŠΉμ • λ“œλ‘­ μœ„μΉ˜λ₯Ό κ°€μ Έμ˜€λŠ” κ΅¬ν˜„μ΄ 훨씬 더 κΉ”λ”ν•΄μ§‘λ‹ˆλ‹€. λͺ©λ‘μ΄ λ“œλž˜κ·Έ μ‹œμž‘ 이벀트λ₯Ό μˆ˜μ‹ ν•˜λ©΄ λ‹¨μˆœνžˆ ν˜„μž¬ μ„ νƒλœ ν•­λͺ©μ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

@jedwards1211 이 라이브러리둜 κ°€λŠ₯ν•œκ°€μš”? 특히 λ“œλž˜κ·Έκ°€ μ‹œμž‘λ˜κΈ° 전에 μ„ νƒλ˜μ§€ μ•Šμ€ ν•­λͺ©μ„ λ“œλž˜κ·Έν•˜κΈ° μ‹œμž‘ν•˜λŠ” 유슀 μΌ€μ΄μŠ€. react-dndκ°€ μž‘λ™ν•˜λŠ” 방식인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

놓기 λŒ€μƒμ΄ μ—¬λŸ¬ 개인 경우λ₯Ό ν•΄κ²°ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?
ν•˜λ‚˜κ°€ μ—¬λŸ¬ ν•­λͺ©μ„ λ“œλž˜κ·Έν•˜κ³ (μœ„ μ†”λ£¨μ…˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ—¬) ν•œ ν•­λͺ©μ΄ ν•œ μœ ν˜•μ˜ 놓기 λŒ€μƒμ— 있고 λ‹€λ₯Έ ν•­λͺ©μ΄ λ‹€λ₯Έ μœ ν˜•μ— μžˆλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. drop λŠ” λ“œλž˜κ·Έλ₯Ό μ‹œμž‘ν•œ λ“œλž˜κ·Έ μ†ŒμŠ€μ— λŒ€ν•΄μ„œλ§Œ νŠΈλ¦¬κ±°λ˜μ§€λ§Œ λ‹€λ₯Έ μ†ŒμŠ€μ—λŠ” νŠΈλ¦¬κ±°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이동 쀑인 각 ν•­λͺ©μ— λŒ€ν•΄ κ°œλ³„μ μœΌλ‘œ λ“œλ‘­μ„ νŠΈλ¦¬κ±°ν•˜λŠ” 방법에 λŒ€ν•œ 아이디어.
μ˜ˆμ‹œ:
Is development slow, Online Whiteboard for Visual Collaboration 2019-11-27 10-45-33

νŽΈμ§‘: 이 λ¬Έμ œμ— λŒ€ν•΄ λ³„λ„μ˜ 문제λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. https://github.com/react-dnd/react-dnd/issues/1650

@melvynhills μ•„λ§ˆλ„ mousedown ν•Έλ“€λŸ¬κ°€ ν•­λͺ© 선택을 νŠΈλ¦¬κ±°ν•˜λ©΄(이 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‚΄κ°€ μ‚¬μš©ν•œ DnDκ°€ μžˆλŠ” λͺ¨λ“  μ†Œν”„νŠΈμ›¨μ–΄λŠ” 이 λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€), μ»¨ν…Œμ΄λ„ˆ ꡬ성 μš”μ†Œκ°€ λ“œλž˜κ·Έκ°€ λ˜λ„λ‘ React DnDμ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. λ“œλž˜κ·Έ μ΄λ²€νŠΈκ°€ mousedown λ‹€μŒμ— 였기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ„ νƒν•œ λͺ¨λ“  μΉ΄λ“œλ₯Ό 각 μΉ΄λ“œ ꡬ성 μš”μ†Œμ— 전달할 ν•„μš”κ°€ μ—†λŠ” μ†”λ£¨μ…˜μ„ μ‘°μ‚¬ν–ˆμŠ΅λ‹ˆκΉŒ?

이것은 κ°œλ³„ ν•­λͺ© λŒ€μ‹  μ»¨ν…Œμ΄λ„ˆ ꡬ성 μš”μ†Œλ₯Ό λ“œλž˜κ·Έ μ†ŒμŠ€λ‘œ λ§Œλ“œλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. React DnD둜 닀쀑 선택을 κ΅¬ν˜„ν•  ν•„μš”λŠ” μ—†μ—ˆμ§€λ§Œ μ–Έμ  κ°€λŠ” μ‚¬λžŒλ“€μ—κ²Œ μƒŒλ“œλ°•μŠ€λ₯Ό λ§Œλ“€μ–΄ μœ μ§€ 관리가 더 μ‰¬μš΄ μ ‘κ·Ό 방식이라고 ν™•μ‹ μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ react-beautiful-dndλ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν•­λͺ© 끌기λ₯Ό κ΅¬ν˜„ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 이에 λŒ€ν•œ ν˜„μž¬ μ†”λ£¨μ…˜μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰