์ฌ์ฉ์๊ฐ ํ์ผ์ ์
๋ก๋ํ๊ธฐ ์ํด ํ์ผ์ ๋์ด๋ค ๋์ ์์๋ ๋ง์ถคํ dropzone ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๋ถํํ๋ react-dnd๊ฐ์ด๋ฅผ ๋ฐฉํดํ๊ณ ์์ต๋๋ค. ๋๋ก๋ ํ์ผ์ ๋๋กญ ์กด์ผ๋ก ๋๋๊ทธํ๋ ๊ฒ์ด ์๋ํ๊ณ , ์ด๋ค ๊ฒฝ์ฐ์๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค ( onDrop
๊ฐ ์คํ๋์ง ์์). ์ด๋ค ์ ์?
๋๋ ๋ฐ๋์ ๋ฌธ์ ๊ฐ ์์๋ค. HTML5 ๋ฐฑ์๋๊ฐ dropzone์์ ์๋ํ๋๋กํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผํฉ๋๋ค.
beginDrag(props) {
Dropzone.instances[0].disable()
๊ณผ
endDrag(props, monitor, component) {
Dropzone.instances[0].enable()
๋ด ๋๋กญ ์กด์ ๋ณธ์ฒด์ ์ฅ์ฐฉ๋์ด ์์ผ๋ฉฐ ์ฅ์ฐฉ ์์๋๋ก ํ๋ ์ด ํ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ชธ ์ ์ฒด๋ก ๋ง๋ค๊ณ ํ์ผ์ ๋์ ์์น์ ๋ฐ๋ผ ์กฐ์น๋ฅผ ์ทจํ๋ ๊ฒ์ด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ํ์ง ์๋๋ค๋ฉด ๋น์ ์ ์ํด ๊ฐ ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ๋๋๊ทธ ๊ฐ๋ฅํ ํญ๋ชฉ์ <input>
์ด ์๊ณ ์ฌ์ฉ์๊ฐ ํญ๋ชฉ์ ์ ํ / ๋๋๊ทธํ๋ฉด ํญ๋ชฉ์ ๋๋๊ทธํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์
๋ ฅ์ ์ด์ ์ด ๋ง์ถฐ์ ธ ์์ผ๋ฉด canDrag
์์ false
๋ฅผ ๋ฐํ ํ ์ ์์ต๋๋ค.
HTML ๋๋๊ทธ / ๋๋กญ ์ ๋ก๋ ๋ฐฉํด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ ์ฒด ๋ ์ด์์์์ ์ด๋ฏธ ํ์ฑํํ์ต๋๋ค. @gaearon , ์๊ฐ?
@ffxsam ์ด๊ฒ์ด ์ฌ์ ํ ๋ฌธ์ ์ ๋๊น?
๋ชจ๋ฅด๊ฒ ์ด์. ์ด ๋ฌธ์ ๋ก ์ธํด ์ ๊ฑฐํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๋ฌธ์ ์ธ์ง ์ ์ ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค! ์ํ๋ ๊ฒฝ์ฐ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ต๋๋ค.
์๋
ํ์ธ์, ์ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ง์ฃผ ์ณค์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ด๋ ค๊ณ ํ์ง๋ง ์ด๋ฏธ ์ด๋ ค์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ReactDnD๋ฅผ ์ธ์คํด์คํ ํ ๋๋ง๋ค ๋ค์ดํฐ๋ธ onDrop ์ด๋ฒคํธ๊ฐ ์๋ํ์ง ์์ต๋๋ค.
๋๋ ๋์ผํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ ์ฒด ๋ณธ๋ฌธ์ ํญ์ ๋๋๊ทธ๋๋ ํ์ผ์ ์์ ํ๋ 'dropzone'์
๋๋ค. ๋งค์ฐ ๊ฐ๋จํ ๊ธฐ๋ฅ์ด๋ฉฐ ์์์์ ๋์ค๊ธฐ ๋๋ฌธ์ ํด๋น ๊ตฌ์ฑ ์์์ ๋ํ ๊ธฐ๋ณธ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ๋ทฐ์์ ReactDnD๊ฐ ์๋ํ๊ณ ๋๋กญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉฐ onDragEnter ๋๋ onDragStart ์ด๋ฒคํธ๋ฅผ ๋ฎ์ด ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฏธ ์์ต๋๋ค.
@kesne @gaearon ์ด๋ค ๋จ์? ReactDnD๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ์ง๋ ์์ต๋๋ค. React์ ๋ํ ์ต๊ณ ์ ๋๋๊ทธ ์ค ๋๋กญ ์ข
์์ฑ์
๋๋ค.
@kesne @gaearon @xavibonell ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Wordpress์ ํจ๊ป React DND๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ wordpress ๋ฏธ๋์ด ์ ๋ก๋๋ ํ์ผ ์ ๋ก๋์ ๊ธฐ๋ณธ ๋๋กญ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. onDrop ์ฝ๋ฐฑ์ ์ฑ์์ ReactDND๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ง ์คํ๋์ง ์์ต๋๋ค. Reactdnd ๋๋กญ ๋์์ ์ ๊ฑฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๋๋ ํ๋ก์ ํธ์ ๋ช ๋ฌ์ ๋ณด๋๊ณ reactdnd๋ ๊ทธ๊ฒ์ ํต์ฌ ๋ถ๋ถ์ด๋ฉฐ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋์์ต๋๋ค. ์ด ์์ ์์ ๋๋ ๋ถ๋ช ํ ๋ค๋ฅธ ๋์๊ด์ผ๋ก ์ด๋ํ ์ฌ์ ๊ฐ ์์ต๋๋ค. ์ด ์ค๋ ๋์ Stack Overflow์ ์ ์ฌํ ๋ณด๊ณ ์์์์ด ๋ฌธ์ ๊ฐ ๊ฝค ์ค๋ซ๋์ ์กด์ฌํ์์ ์ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ํ ๋ชจ๋ ํด๊ฒฐ์ฑ ์ ๋ง์ด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์, ๊ธฐ๋ณธ ์์์ ์ฌ์ฉ์ ์ ์ dnd ์์๊ฐ์ ์๋ชป๋ ์ํธ ์์ฉ์ด์์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ํ์ฌ ๋ฌธ์ ๋ฅผ ์กฐ์ฌ ํ ์๊ฐ์ด ๋ง์ง ์์ง๋ง์ด ํ๋ก์ ํธ๋ฅผ ์ํด ์๊ฐ์ ํ ์ ํ ๊ณํ์ด๋ฉฐ ์ด๊ฒ์ด ์ ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ดํด ๋ณด๋ ๋ฌธ์ ์ค ํ๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฅํ๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์๋๋ก ๋ณต์ ์์ ๋ก ์ต์ํ์ ์ ์ฅ์ ์ค์ ์ ์ป๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉ ํ ๊ฒ์ ๋๋ค.
@kesne ๊ทํ์ ๋ต๋ณ์ ๊ฐ์ฌ ๊ธฐ์ฉ๋๋ค . ๋๋ ํ์คํ ๋น์ ์ ์ํด ๋ผ์ด๋ธ ์์ ๋ฅผ ๋ง๋ค๊ณ ๋น ๋ฅธ ์์ผ ๋ด์ ์ฌ๊ธฐ์ ๋งํฌ๋ฅผ ๊ฒ์ ํ ๊ฒ์
๋๋ค.
๊ทธ ๋์ ๋๋ ์ผ์์ ์ธ ํดํน์ ์๊ฐํ ๊ฒ ๊ฐ๊ณ ์์ง ์ฒ ์ ํ ํ
์คํธํ์ง๋ ์์์ง๋ง ์ง๊ธ์ ํธ๋ฆญ์ ์ํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฐฝ ์์์ ๋ฐ์ธ๋ฉํ๋ HTML5Backend์ setup () ๋ฐ teardown () ํจ์๊ฐ ์์์ ์์์ต๋๋ค. ํ์์ ๊ฒฝ์ฐ ์๋ ํ๋ ์ค ํ์ผ ์
๋ก๋๋ ์ ์ฒด ํ๋ฉด์ ์ฐจ์งํ๋ ๋ชจ๋ฌ ์์์ด๋ฏ๋ก ๋ชจ๋ฌ์ด ์ด๋ ค์์ ๋ ReactDND ์์๋ฅผ ๋์ด์ ๋์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ฌ ์ฐฝ์ ์ด๊ธฐ ์ด๋ฒคํธ ์ค์ ๋ฐฑ์๋์ ์ธ์คํด์ค (DragDropManager๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅ)์์ teardown () ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ชจ๋ฌ์ด ๋ซํ๋ ๋์ setup () ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๊ฒ์ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ถํด ๋ฐ ์ค์ ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ฉด ๊ธฐ์กด ๋๋ ์๋ก ๋ ๋๋ง ๋ ๊ตฌ์ฑ ์์์์ ReactDND์ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋์ง ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
์ด๊ฒ์ด ๋ฌธ์ ์ ๋๋ค : https://github.com/react-dnd/react-dnd-html5-backend/blob/85fc956c58a5d1a9fde2fca3c7fca9115a7c87df/src/HTML5Backend.js#L452
์ฝ๋์ ์ฃผ์ "Do n't show a nice cursor"์ ๋ฐ๋ฅด๋ฉด e.dataTransfer.dropEffect
๋ฅผ ํ์ ์์ฑ์ผ๋ก ๋ง ์ทจ๊ธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ dropEffect๋ฅผ none
์ค์ ๋ก ํ์ผ์ด ๋ชจ๋ ํจ๊ป ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ ๊ฐ์ต๋๋ค. move
, copy
๋๋ link
์ ์๋ํฉ๋๋ค. ์ด๊ฒ์ Chrome 55.0.2์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ค์ ๋ก react-dnd ์ธ๋ถ์์ ์ด๊ฒ์ ๋ชจ๋ ํจ๊ป ๋ณต์ ํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐ์ด์ฌ๋ฆฐ์ ๋ง๋ค์์ต๋๋ค : https://jsfiddle.net/ypr6os00/8/
dropEffect์ ๋ํ effectAllowed
๊ฐ ์๋ํ๋ ๋ฐ๋ฉด dropEffect
๋ ํ๋ฆฌ์ ํ
์ด์
ํธ์ง : ์ด๊ฒ์ https://github.com/gaearon/react-dnd-html5-backend/issues/25 ์ ๋์ผํ ๋ฌธ์ ์ ๋๋ค.
์ ๊ฒฝ์ฐ์๋ e.dataTransfer.dropEffect = 'none';
(https://github.com/react-dnd/react-dnd-html5-backend/blob/85fc956c58a5d1a9fde2fca3c7fca9115a7c87df/src/HTML5Backend.js#L452)๋ฅผ ๊ฐ๋จํ ์ฃผ์ ์ฒ๋ฆฌํ์ฌ ํ์ธํ ์ ์์ต๋๋ค. ) ๋ด Dropzone ๋๋กญ ์ด๋ฒคํธ๋ฅผ ๋ฐฉํดํ๋ react-dnd ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ฐธ๊ณ ๋ก ๋ค์๊ณผ ์ ์ฌํ ์ค์ ์ด ์์ต๋๋ค.
<DragDropContextProvider backend={HTML5Backend}>
<Dropzone>
<DropTargetComponent />
<OtherComponent>
<DragSourceComponent1 />
<DragSourceComponent2 />
<DragSourceComponentN />
</OtherComponent>
</Dropzone>
</DragDropContextProvider>
DropTargetComponent = DropTarget(TYPE, target, collect)(Component)
๋ฐ DragSourceComponent = DragSource(TYPE, source, collect)(Component)
.
์ด ํจ์น ๋๋ ๋ ๋์ ์์ ์ ์๋ ค์ง ๋ถ์์ฉ์ด ์์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๊ฒ์ ์์ํ ๋ณํฉ ๋ ์ ์์ต๋๊น?
๋ชจ๋ ํ๋ฅญํ ์์ ์ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ฃผ์ @ kn0ll ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
[ํธ์งํ๋ค]
๋๊ตฌ์๊ฒ๋ ์ ์ฉํ๋ค๋ฉด ๋ฉ์ธ ํ๋ก์ ํธ์์์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋ ๋๊น์ง Github ํฌํฌ ์ npm ํจํค์ง๋ฅผ ๋ง๋ค์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
์ค์ฒฉ ๋ ๋๋กญ ์กด์ ๋ํด react-dropzone ์์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. ์ ํ๋ฅผ ์ค์งํ๊ณ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค๋์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ ๊น์ง๋ ์ด๊ฒ์ด ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์์ต๋๋ค.
์ด ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค์ฒฉ ๋ ๋๋กญ ์กด์ ๋ํ ์์ด๋์ด๋ฅผ ๊ฐ์ํ ๋, div ๋ด๋ถ์ what-uploading-component๋ฅผ ๋ํํ๊ณ ํด๋น div์ onDragOver ์์ฑ์ ์ถ๊ฐํ์ฌ ์ ํ๋ฅผ ์ค์งํ์ต๋๋ค. ์ด๊ฒ์ ๋ด ๊ฒฝ์ฐ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ ๊ฐ ์์ต๋๋ค (Filepond๋ฅผ ์ฌ์ฉํ์ต๋๋ค).
handleDragOver (event) {
console.log('dragged over ', event.dataTransfer)
event.stopPropagation()
}
render () {
return (
<div onDragOver={this.handleDragOver}>
<FilePond />
</div>
)
}
๊ทธ๋ฌ๋ react-dnd๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์ d & d ๊ธฐ๋ฅ์์ด ์ ๋๋ก ๋ฐฉํด ํ ์ ์๋ค๋ ์๊ฐ์ ๋ง์์ ๋ค์ง ์์ต๋๋ค. d & d DOM ๋ ธ๋์ react-dnd๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ ๊ตฌ์ฑ ์์๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์์ d & d ํ์ผ ๋๋กญ ๊ธฐ๋ฅ์ ์์์ํฌ ์์๋ ํฐ ์ฌ๊ณ ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด +1
์๋ง๋ ๋ช ๊ฐ์ง ๋น ๋ฅธ ํด๊ฒฐ์ฑ ์ dropEffect๊ฐ ์ด๋ค ์ํ ์ฒด์ธ์ ํตํด ์ด๋ป๊ฒ ๋ ์ง์ ๋ ์ ์์ต๋๊น?
๊ฒฐ๊ตญ HTML5 ๋ฐฑ์๋์ @silvainSayduck ํฌํฌ๋ฅผ ์ฌ์ฉ
๊ณง์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? @silvainSayduck ์์ ์ ๋ํ ํ ์์ฒญ์ ์ด ์ ์์ต๋๊น?
๋ด ์ ์ฅ์์์ ํ ์์ฒญ์ ๋ง๋ค์์ง ๋ง ์ด๊ฒ์ด ๋ง์ ๋์์ด ๋ ์ง ํ์ ํ์ง ๋ชปํ์ต๋๋ค (ํ ์ค์ ์์น ์๋ ๋ถ์์ฉ์ด ์๋ค๋ ์ฃผ์์ ๋ฌ์๋์ง ๋๋ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ผ๋ ์ฌ์ ํ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค).
@darthtrevino ์ด ํ๋ก์ ํธ์ ๊ณตํ์๋ก ์ฐธ์ฌ
PR์ ์ดํด๋ณด๋ฉด ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค. ์์ ์ ๊ด๋ จ์ด ์๋์ง ํ์ธํด์ผํฉ๋๋ค.
# 1240์ ํฉ๋ณ
@darthtrevino ๋ง์ด ๊ฐ์ฌํฉ๋๋ค! npm ๋ฒ์ ์์ ์ธ์ ์ถ์ ๋๋์?
ํ๋ฃจ๊ฐ ๋๋ ๋ฌด๋ ต-์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํ ์๊ฐ์ด ์๊ธฐ๋ฉด ์ผ๋ฐ์ ์ธ ์์ ํ๋ฆ์ PR ์ผ๊ด ์์ ์ ์ํ ํ ๋ค์ ๋ฆด๋ฆฌ์ค๋ฅผ ์๋ฅด๋ ๊ฒ์ ๋๋ค.
@darthtrevino ํ์ฌ ๋ฆด๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์ธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ด ํ์ฌ ๋ฆด๋ฆฌ์ค์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋ ค์ฃผ์ธ์
@darthtrevino ๊ฐ์ฌํฉ๋๋ค, ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค์ฒฉ ๋ ๋๋กญ ์กด์ ๋ํ ์์ด๋์ด๋ฅผ ๊ฐ์ํ ๋, div ๋ด๋ถ์ what-uploading-component๋ฅผ ๋ํํ๊ณ ํด๋น div์ onDragOver ์์ฑ์ ์ถ๊ฐํ์ฌ ์ ํ๋ฅผ ์ค์งํ์ต๋๋ค. ์ด๊ฒ์ ๋ด ๊ฒฝ์ฐ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ ๊ฐ ์์ต๋๋ค (Filepond๋ฅผ ์ฌ์ฉํ์ต๋๋ค).
handleDragOver (event) { console.log('dragged over ', event.dataTransfer) event.stopPropagation() } render () { return ( <div onDragOver={this.handleDragOver}> <FilePond /> </div> ) }
๊ทธ๋ฌ๋ react-dnd๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์ d & d ๊ธฐ๋ฅ์์ด ์ ๋๋ก ๋ฐฉํด ํ ์ ์๋ค๋ ์๊ฐ์ ๋ง์์ ๋ค์ง ์์ต๋๋ค. d & d DOM ๋ ธ๋์ react-dnd๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ ๊ตฌ์ฑ ์์๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์์ d & d ํ์ผ ๋๋กญ ๊ธฐ๋ฅ์ ์์์ํฌ ์์๋ ํฐ ์ฌ๊ณ ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด +1
์๋ง๋ ๋ช ๊ฐ์ง ๋น ๋ฅธ ํด๊ฒฐ์ฑ ์ dropEffect๊ฐ ์ด๋ค ์ํ ์ฒด์ธ์ ํตํด ์ด๋ป๊ฒ ๋ ์ง์ ๋ ์ ์์ต๋๊น?
handleDragOver [Dropzone]์ event.stopPropagation()
๋ฅผ ์ถ๊ฐํ๋ฉด ์ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค @vileppanen
์ด ์ค๋ ๋๋ ๋ด ์๋ช ์ ๊ตฌํ์ต๋๋ค
<Dropzone />
์ด react-dnd
๊ตฌ์ฑ ์์ ๋ด๋ถ์์๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋์ผํ ์๋ฃจ์
์ด ์๋ํฉ๋๋ค. <div onDragOver={e=> e.stopPropagation() />
์์ onDragOver
<Dropzone />
๋ํ ์ ํ๋ฅผ ์ค์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ด ๋ฌธ์ ์ ๋๋ค : https://github.com/react-dnd/react-dnd-html5-backend/blob/85fc956c58a5d1a9fde2fca3c7fca9115a7c87df/src/HTML5Backend.js#L452
์ฝ๋์ ์ฃผ์ "Do n't show a nice cursor"์ ๋ฐ๋ฅด๋ฉด
e.dataTransfer.dropEffect
๋ฅผ ํ์ ์์ฑ์ผ๋ก ๋ง ์ทจ๊ธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ dropEffect๋ฅผnone
์ค์ ๋ก ํ์ผ์ด ๋ชจ๋ ํจ๊ป ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ ๊ฐ์ต๋๋ค.move
,copy
๋๋link
์ ์๋ํฉ๋๋ค. ์ด๊ฒ์ Chrome 55.0.2์ ์์ต๋๋ค.์ฐ๋ฆฌ๋ ์ค์ ๋ก react-dnd ์ธ๋ถ์์ ์ด๊ฒ์ ๋ชจ๋ ํจ๊ป ๋ณต์ ํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐ์ด์ฌ๋ฆฐ์ ๋ง๋ค์์ต๋๋ค : https://jsfiddle.net/ypr6os00/8/
dropEffect์ ๋ํ
effectAllowed
๊ฐ ์๋ํ๋ ๋ฐ๋ฉดdropEffect
๋ ํ๋ฆฌ์ ํ ์ด์ ํธ์ง : ์ด๊ฒ์ https://github.com/gaearon/react-dnd-html5-backend/issues/25 ์ ๋์ผํ ๋ฌธ์ ์ ๋๋ค.