React-dnd: monitor.isDragging()이 trueλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•  λ•Œ falseλ₯Ό λ°˜ν™˜ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2015λ…„ 07μ›” 09일  Β·  12μ½”λ©˜νŠΈ  Β·  좜처: react-dnd/react-dnd

두 개 μ΄μƒμ˜ μƒν˜Έ 운용 κ°€λŠ₯ν•œ μ •λ ¬ κ°€λŠ₯ν•œ λͺ©λ‘μ„ μ‚¬μš©ν•˜λŠ” 경우 ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ ν•­λͺ©μ„ 끌 λ•Œ trueλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ” 경우 monitor.isDragging()이 falseλ₯Ό λ°˜ν™˜ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ„€μ •: κ°„λ‹¨ν•œ μ •λ ¬ κ°€λŠ₯ν•œ 데λͺ¨μ—μ„œ μ‹œμž‘ν•˜μ—¬ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ™€ μ •λ ¬ κ°€λŠ₯ν•œ 개체 집합을 μΆ”κ°€ν•©λ‹ˆλ‹€. μΉ΄λ“œλŠ” ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ λ“œλž˜κ·Έν•  수 μžˆμ–΄μ•Ό ν•˜κ³ , 자체 μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ μ •λ ¬ν•  수 μžˆμ–΄μ•Ό ν•˜λ©°, ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ λ“œλž˜κ·Έν•  λ•Œ μ •λ ¬ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ μΉ΄λ“œλ₯Ό 이동할 λ•Œ λ°œμƒν•©λ‹ˆλ‹€. μΉ΄λ“œ ꡬ성 μš”μ†ŒλŠ” 뢈투λͺ…도λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ isDragging 속성(DragSource λ°μ½”λ ˆμ΄ν„°μ— μ˜ν•΄ μ£Όμž…λ¨)에 μ˜μ‘΄ν•˜μ§€λ§Œ, ν•­λͺ©μ΄ ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆλ‘œ λ“œλž˜κ·Έλ  λ•Œ μ „μ—­ λͺ¨λ‹ˆν„°λŠ” λ“œλž˜κ·Έλœ ꡬ성 μš”μ†Œμ™€ 더 이상 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” sourceIdλ₯Ό λ³€κ²½ν•˜κ³  κ²°κ΅­ λ°˜ν™˜λ©λ‹ˆλ‹€. trueλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•  λ•Œ isDragging에 λŒ€ν•œ ν˜ΈμΆœμ— λŒ€ν•΄ falseμž…λ‹ˆλ‹€.

λ“œλž˜κ·Έ μ†ŒμŠ€μ—λŠ” λ“œλž˜κ·Έ κ°€λŠ₯ν•œ κ°œμ²΄λ‹Ή μΌκ΄€λœ μ „μ—­ 고유 ν‚€κ°€ 이미 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ—(λ“œλž˜κ·Έ κ°€λŠ₯ν•œ ꡬ성 μš”μ†Œμ˜ ν‚€κ°€ μ–Έμ œλ“ μ§€ λ³€κ²½λ˜λ©΄ λ‹€λ₯Έ ν•­λͺ©μ€ μ‹€μ œλ‘œ μ˜€μž‘λ™ν•¨) ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ“œλž˜κ·Έκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ„λ‘ sourceIdλ₯Ό 지정할 λ•Œ μ½”λ“œμ—μ„œ ν•΄λ‹Ή ν‚€λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

예제 μ½”λ“œκ°€ ν•„μš”ν•˜λ©΄ μ•Œλ €μ£Όμ‹­μ‹œμ˜€. 이 문제λ₯Ό λ³΄μ—¬μ£ΌλŠ” λ‚΄ μ½”λ“œλŠ” κ°„λ‹¨ν•œ μ •λ ¬ κ°€λŠ₯ν•œ 데λͺ¨λ₯Ό 기반으둜 ν•©λ‹ˆλ‹€.

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

isDragging κ°€ ꡬ성 μš”μ†Œ νŠΈλ¦¬μ—μ„œ μž‘λ™ν•˜λ €λ©΄ λ“œλž˜κ·Έ μ†ŒμŠ€μ— isDragging λ₯Ό μˆ˜λ™μœΌλ‘œ κ΅¬ν˜„ν•˜μ‹­μ‹œμ˜€.

const ingredientSource = {
    beginDrag(props) {
        return { ingredient: props.ingredient };
    },
    isDragging(props, monitor) {
        return props.ingredient === monitor.getItem().ingredient;
    }
};

DragSource λ¬Έμ„œ μ°Έμ‘° :

isDragging(props, monitor) : 선택 μ‚¬ν•­μž…λ‹ˆλ‹€. 기본적으둜 끌기 μž‘μ—…μ„ μ‹œμž‘ν•œ 끌기 μ†ŒμŠ€λ§Œ 끌기둜 κ°„μ£Όλ©λ‹ˆλ‹€. μ‚¬μš©μž μ •μ˜ isDragging λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜μ—¬ 이 λ™μž‘μ„ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. props.id === monitor.getItem().id 와 같은 것을 λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ“œλž˜κ·Έν•˜λŠ” λ™μ•ˆ μ›λž˜ ꡬ성 μš”μ†Œκ°€ 마운트 ν•΄μ œλ˜κ³  λ‚˜μ€‘μ— λ‹€λ₯Έ μƒμœ„ μš”μ†Œλ‘œ "λΆ€ν™œ"될 수 μžˆλŠ” 경우 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€. 예λ₯Ό λ“€μ–΄, Kanban λ³΄λ“œμ˜ λͺ©λ‘μ—μ„œ μΉ΄λ“œλ₯Ό 이동할 λ•Œ λ“œλž˜κ·Έν•œ λͺ¨μ–‘을 μœ μ§€ν•˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€. 비둝 기술적으둜 ꡬ성 μš”μ†Œκ°€ 마운트 ν•΄μ œλ˜κ³  λ‹€λ₯Έ λͺ©λ‘μœΌλ‘œ 이동할 λ•Œλ§ˆλ‹€ λ‹€λ₯Έ μΉ΄λ“œκ°€ λ§ˆμš΄νŠΈλ˜λ”λΌλ„ λ§μž…λ‹ˆλ‹€. _μ°Έκ³ : 이 λ©”μ„œλ“œ λ‚΄μ—μ„œ monitor.isDragging() ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€._

도움이 λ˜λ‚˜μš”?

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

@amoenk 예, 도움이 λ˜λŠ” 예제 μ½”λ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

λ‹Ήμ‹ μ˜ 도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! μž‘λ™ μ˜ˆλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. http://notlouieagain.com/~amoenk/dnd/

그리고 이 λ§ν¬λŠ” λ²ˆλ“€λ˜μ§€ μ•Šμ€ μ½”λ“œλ₯Ό μ°Ύμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. http://notlouieagain.com/~amoenk/dnd/js/

μ•„, λ””λ²„κΉ…ν•˜λŠ” λ™μ•ˆ μ •λ ¬ κ°€λŠ₯ν•œ μ›λž˜μ˜ κ°„λ‹¨ν•œ 데λͺ¨ μ½”λ“œλ„ ν¬ν•¨ν–ˆμ§€λ§Œ μ€‘μš”ν•œ ꡬ성 μš”μ†ŒλŠ” Ingredient와 IngredientGroupμž…λ‹ˆλ‹€.

κ·€ν•˜μ˜ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μ•˜μ§€λ§Œ DnDStudy ꡬ성 μš”μ†Œλ₯Ό 찾을 수 μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ μ™„μ „ν•œ μ½”λ“œμ™€ λ‹Ήμ‹ μ˜ κ²ƒλ§Œ 보여쀄 수 μžˆμŠ΅λ‹ˆκΉŒ? 데λͺ¨ μ½”λ“œλ₯Ό μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

데λͺ¨ μ½”λ“œ 제거, DnDStudy ꡬ성 μš”μ†ŒλŠ” μ—¬κΈ°μ—μ„œ νŽ˜μ΄μ§€ ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€: http://notlouieagain.com/~amoenk/dnd/js/pages/DnDStudy.react.js

μ’‹μ•„, λ‚΄κ°€λ³΄κ³ ν–ˆκ³  λ‚˜λŠ” 그것이 μΈν•΄μ˜ 킀에 λ¬Έμ œκ°€μžˆμ„ 수 μžˆλ‹€κ³  생각 IngredientGroup λ‚΄λΆ€ DnDStudy . λŒ€μ‹  λ°°μ—΄μ˜ μΈλ±μŠ€μ— 의쑴, μœ μ‚¬ν•œ λͺ‡ 가지 고유 ν•œ IDλ₯Ό μ‚¬μš©ν•˜λ €κ³  Ingredient λ‚΄λΆ€ IngredientGroup .

μ½”λ“œκ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆμ§€λ§Œ μ—¬μ „νžˆ λ™μΌν•œ λ¬Έμ œμž…λ‹ˆλ‹€.

확인. κ·Έλ•Œ λ‚΄κ°€ ν‹€λ Έλ‹€.

@gaearon λ„μ™€μ€„λž˜?

isDragging κ°€ ꡬ성 μš”μ†Œ νŠΈλ¦¬μ—μ„œ μž‘λ™ν•˜λ €λ©΄ λ“œλž˜κ·Έ μ†ŒμŠ€μ— isDragging λ₯Ό μˆ˜λ™μœΌλ‘œ κ΅¬ν˜„ν•˜μ‹­μ‹œμ˜€.

const ingredientSource = {
    beginDrag(props) {
        return { ingredient: props.ingredient };
    },
    isDragging(props, monitor) {
        return props.ingredient === monitor.getItem().ingredient;
    }
};

DragSource λ¬Έμ„œ μ°Έμ‘° :

isDragging(props, monitor) : 선택 μ‚¬ν•­μž…λ‹ˆλ‹€. 기본적으둜 끌기 μž‘μ—…μ„ μ‹œμž‘ν•œ 끌기 μ†ŒμŠ€λ§Œ 끌기둜 κ°„μ£Όλ©λ‹ˆλ‹€. μ‚¬μš©μž μ •μ˜ isDragging λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜μ—¬ 이 λ™μž‘μ„ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. props.id === monitor.getItem().id 와 같은 것을 λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ“œλž˜κ·Έν•˜λŠ” λ™μ•ˆ μ›λž˜ ꡬ성 μš”μ†Œκ°€ 마운트 ν•΄μ œλ˜κ³  λ‚˜μ€‘μ— λ‹€λ₯Έ μƒμœ„ μš”μ†Œλ‘œ "λΆ€ν™œ"될 수 μžˆλŠ” 경우 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€. 예λ₯Ό λ“€μ–΄, Kanban λ³΄λ“œμ˜ λͺ©λ‘μ—μ„œ μΉ΄λ“œλ₯Ό 이동할 λ•Œ λ“œλž˜κ·Έν•œ λͺ¨μ–‘을 μœ μ§€ν•˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€. 비둝 기술적으둜 ꡬ성 μš”μ†Œκ°€ 마운트 ν•΄μ œλ˜κ³  λ‹€λ₯Έ λͺ©λ‘μœΌλ‘œ 이동할 λ•Œλ§ˆλ‹€ λ‹€λ₯Έ μΉ΄λ“œκ°€ λ§ˆμš΄νŠΈλ˜λ”λΌλ„ λ§μž…λ‹ˆλ‹€. _μ°Έκ³ : 이 λ©”μ„œλ“œ λ‚΄μ—μ„œ monitor.isDragging() ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€._

도움이 λ˜λ‚˜μš”?

μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€! λ¬Έμ„œμ—μ„œ 그것을 놓쳀을 κ²ƒμž…λ‹ˆλ‹€.

λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! 티켓을 λŠκ² μŠ΅λ‹ˆλ‹€.

문제 μ—†μ–΄μš”. 도와 쀄 μˆ˜μžˆμ–΄μ„œ 기뻐.

μœΌμ•…! http://notlouieagain.com/에 λŒ€ν•œ 링크가 μ‘λ‹΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ ...

문제의 κ·Όλ³Έ 원인을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. DropTargets 및 DragSourcesλ₯Ό λž˜ν•‘ν•˜κΈ° μœ„ν•΄ DragDropContextProvider μ‚¬μš©μ„ 쀑단해야 ν–ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ 예λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.
http://react-dnd.github.io/react-dnd/docs-drag-drop-context-provider.html

export default class YourApp {
    render() {
        return (
            <DragDropContextProvider backend={HTML5Backend}>
                /* ... */
            </DragDropContextProvider>
        )
    }
}

λŒ€μ‹  DragDropContextλ₯Ό μ‚¬μš©ν•˜μ—¬ μ•„λž˜μ™€ 같이 전체 클래슀λ₯Ό λž˜ν•‘ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
http://react-dnd.github.io/react-dnd/docs-drag-drop-context.html

class YourApp {
    /* ... */
}
export default DragDropContext(HTML5Backend)(YourApp)

이것은 μ¦‰μ‹œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

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