React-dnd: React DnD๊ฐ€ Chrome 59์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2017๋…„ 06์›” 08์ผ  ยท  33์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: react-dnd/react-dnd

Chrome 59๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ react-dnd๊ฐ€ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์กฐ์‚ฌ ํ›„ ๋‘ ๋ฒˆ์งธ ํ•ญ๋ชฉ/์‹œ๊ฐ„์„ ๋“œ๋ž˜๊ทธํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐ˜์‘-dnd ์˜คํ•ด๋กœ ์ด์–ด์ง€๋Š” Chrome์ด ๋” ์ด์ƒ "dragend" ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ˆ„๊ตฌ๋‚˜ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๊นŒ?

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

์ด ํ•ดํ‚น์œผ๋กœ ํ•ด๊ฒฐ๋จ:

const ModifiedBackend = (...args) => {
    const instance = new HTML5Backend(...args);

    // Fix Chrome 59 not sending a DragEnd after Drop, which other browsers do and react-dnd expects
    const originalTopDrop = instance.handleTopDrop;
    const originalTopDragEndCapture = instance.handleTopDragEndCapture;
    let dragEndTimeout;
    instance.handleTopDrop = (e, ...args) => {
        dragEndTimeout = setTimeout(() => {
            originalTopDragEndCapture(e, ...args);
        }, 0);
        originalTopDrop(e, ...args);
    };
    instance.handleTopDragEndCapture = (e, ...args) => {
        clearTimeout(dragEndTimeout);
        originalTopDragEndCapture(e, ...args);
    };

    return instance;
};

// Decorate root elements with this
export default DragDropContext(ModifiedBackend);

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

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์—†์ด Chrome์„ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”.

@theTechie Windows์˜ Mac์—์„œ ํ™•์ธํ•˜์…จ์Šต๋‹ˆ๊นŒ? Mac์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งฅ์—์„œ ํ™•์ธํ–ˆ๋‹ค. ํŠน์ • ํ”Œ๋žซํผ์˜ ๋ฌธ์ œ์ธ๊ฐ€์š”?

@theTechie ์–ด๋–ค ์ด์œ ๋กœ ๋ฐ˜์‘ dnd๋Š” ์ •์ƒ์ ์œผ๋กœ 'dragend'๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋Œ€์˜ ์ปดํ“จํ„ฐ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ํ•œ Mac์—๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ๋ชจ๋“  Windows์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒ๊ฐ?

Chrome์˜ Windows 8.1/Windows 7๊ณผ IE 10 ๋ฐ IE 11์—์„œ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@hunterbmt - ์ฝ˜์†”์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๊นŒ? ์ƒํ™ฉ์— ๋งž๋Š” GIF๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@theTechie ๋ฐ˜์‘ dnd์˜ ์˜ˆ์ œ ์‚ฌ์ดํŠธ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Chrome 59๋Š” Chrome 58, FF, Safari ๋ฐ IE์—์„œ๋„ ์™„๋ฒฝํ•˜๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ 'dragend'๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž ์‹œ ํ›„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด '๋“œ๋กญ' ํ›„ 'dragend'๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ์ด ๋ฌธ์ œ์— ์‹คํŒจํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ˆ˜์ • ์‚ฌํ•ญ์„ react-dnd๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Chrome 59์˜ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด์•˜์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ†ต์ฐฐ๋ ฅ์ด ์žˆ์œผ๋ฉด ์ž…๋ ฅํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@hunterbmt ๊ท€ํ•˜์˜ ์ฝ”๋“œ์— ๊ณ ์œ ํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์—์„œ react-dnd๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๋ชจ๋‘ Chrome 59์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์—ฌ๊ธฐ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows์˜ Chrome 59.0.3071.86์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Firefox์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์ด์ „ Chrome ๋ฒ„์ „์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€.json:

{
  "dependencies": {
    "react-dnd": "2.1.4",
    "react-dnd-html5-backend": "2.1.2",
  }
}

๊ฒฐ๊ณผ๋Š” 2.4.0/2.4.1๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•ดํ‚น์œผ๋กœ ํ•ด๊ฒฐ๋จ:

const ModifiedBackend = (...args) => {
    const instance = new HTML5Backend(...args);

    // Fix Chrome 59 not sending a DragEnd after Drop, which other browsers do and react-dnd expects
    const originalTopDrop = instance.handleTopDrop;
    const originalTopDragEndCapture = instance.handleTopDragEndCapture;
    let dragEndTimeout;
    instance.handleTopDrop = (e, ...args) => {
        dragEndTimeout = setTimeout(() => {
            originalTopDragEndCapture(e, ...args);
        }, 0);
        originalTopDrop(e, ...args);
    };
    instance.handleTopDragEndCapture = (e, ...args) => {
        clearTimeout(dragEndTimeout);
        originalTopDragEndCapture(e, ...args);
    };

    return instance;
};

// Decorate root elements with this
export default DragDropContext(ModifiedBackend);

@awestroke ๋‚˜๋Š” ๊ฝค ๋น„์Šทํ•œ ํ•ดํ‚น์œผ๋กœ ๋๋‚˜์ง€๋งŒ ๋†“์„ ์ˆ˜ ์—†๋Š” ์˜์—ญ์—์„œ ๋น ๋ฅด๊ฒŒ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Chrome์€ 'dragend'๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฌผ๋ก  'drop'๋„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜†์—์„œ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@hunterbmt ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์—†๋Š” ์ง€์—ญ์— ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ react-dnd๊ฐ€ ์†์ƒ๋œ ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์•„ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

endDrag๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์กฐ๊ฑด์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ด ๋ฌธ์ œ์™€ ์ž ์žฌ์  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/react-dnd/react-dnd/pull/801

๋งค๋ฒˆ์€ ์•„๋‹ˆ์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋“œ๋กญ ์˜์—ญ ์•ˆ์— ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์œ„์ ฏ์ด ์žˆ์œผ๋ฉฐ ์œ„์ ฏ์„ ๋†“์„ ๋•Œ ํ•ด๋‹น ๋“œ๋กญ ์˜์—ญ์ด ์ผ๋ถ€ html์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ๋น„๋””์˜ค ์œ„์ ฏ์„ ๋†“๊ธฐ๋กœ ์„ ํƒํ•˜๋ฉด iframe ๊ฐ€ ๋ Œ๋”๋ง๋˜๊ณ  ๊นจ์ง€๊ณ  ๊ทธ ํ›„์— ๋‹ค๋ฅธ ์œ„์ ฏ์„ ๋Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค( dragend ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ). ๊ทธ๋Ÿฌ๋‚˜ iframe ๋ฅผ ์ผ๋ถ€ ํ…์ŠคํŠธ ๋˜๋Š” ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊พธ๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ Chrome 59 ์ด์ „์—๋Š” ์ž‘๋™ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ž‘๋™ํ–ˆ์ง€๋งŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Chrome ๋˜๋Š” react-dnd?

@rogyvoje Chrome์ด 'dragend'์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์–ด๋””์—๋„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Btw, 'dragstart' ์ดํ›„์˜ 'mousemove'์— ๋”ฐ๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ 'dragend'์— ์˜์กดํ•˜๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” 'mousemove'(DOM์—์„œ ์š”์†Œ๋ฅผ ๋“œ๋ž˜๊ทธ)์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ๋‚ด PR๋กœ ๋” ํ•ฉ๋ฆฌ์ ์ด๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

@hunterbmt ์ดํ•ดํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„
ํ•˜์ง€๋งŒ npm/yarn์„ ํ†ตํ•ด pull ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ, ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ์ž˜๋ชป? ๐Ÿ˜•

@rogyvoje ๋ฒ„์ „ ๋Œ€์‹  ๋‚ด ์ง€์ ์„ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PR์€ ๋ณ‘ํ•ฉ๋˜์—ˆ์ง€๋งŒ react-dnd๋Š” ์•„์ง ์ƒˆ ๋ฒ„์ „์ด ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ react-dnd npm/yarn์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@hunterbmt
๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋„ํ–ˆ๋‹ค.

npm install git+https://github.com/react-dnd/react-dnd.git#41eb8caa0bc106c9edf0d3ca628b49e70525090b

ํ•˜์ง€๋งŒ ๋กœ๊ทธ์ธ ํ™”๋ฉด์€ ํ•ญ์ƒ ํŒ์—…๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜•

์ด ์Šค๋ ˆ๋“œ์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌธ์ œ์˜ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‚ฌ๋ก€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” react-dnd ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ Chrome 59์—์„œ ์–ด๋–ค ๋ฌธ์ œ๋„ ์‹๋ณ„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Chrome 59๊ฐ€ drag/drop ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— react-dnd ๊ฐ€ ์‹คํŒจํ•˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‚ฌ๋ก€์— ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค drag/drop ์ด๋ฒคํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ณธ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งค์šฐ ์‰ฝ๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„์„ ๋‚ด์–ด ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‚ฌ๋ก€๋ฅผ ๊ฒŒ์‹œํ•ด ๋ณด์„ธ์š”(github repo ๋˜๋Š” ์—ฌ๊ธฐ์— ๊ฒŒ์‹œ๋œ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ). https://codesandbox.io/) ๋ฐ ์˜๋ฏธ ์žˆ๋Š” ์ •๋ณด(์˜ˆ: OS, react-dnd ๋ฒ„์ „ ๋“ฑ)๋ฅผ ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๋งˆ์›Œ!

@bjrmatos ์—ฌ๊ธฐ, ๋‚ด๊ฐ€ ํ•˜๋‚˜ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ๊ฒฝ์šฐ์ด๋ฉฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

https://github.com/rogyvoje/react-dnd-chrome-59

ํฌ๋กฌ 59 ๋ฐ ํ˜„์žฌ ์—…๋ฐ์ดํŠธ์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฒ„์ „ 60.0.3112.78(๊ณต์‹ ๋นŒ๋“œ)(64๋น„ํŠธ)

Windows ์ •๋ณด:
OS ์ด๋ฆ„: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ 10 ํ”„๋กœ
OS ๋ฒ„์ „: 10.0.14393 ํ•ด๋‹น ์—†์Œ ๋นŒ๋“œ 14393

Chrome: ๋ฒ„์ „ 55.0.2883.87(64๋น„ํŠธ)(Linux/Mint 18)์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์œผ๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค...

@rogyvoje ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‚˜์ค‘์— ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด Windows 7 VM์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Windows 10์—์„œ ๋‹ค๋ฅธ VM์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…• @rogyvoje ๋‚˜๋Š” ๋‹น์‹ ์ด ๊ฑฐ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋งํ–ˆ๋“ฏ์ด ์ตœ์‹  ํฌ๋กฌ ๋ฆด๋ฆฌ์Šค์—์„œ ์ง์ ‘ ์ €์žฅ์†Œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค(๋ฒ„์ „ 60.0.3112.78(๊ณต์‹ ๋นŒ๋“œ)(64๋น„ํŠธ)-Windows 10 PRO). ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๋ชจ๋“  ์˜ค๋ฅ˜.

์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ์ฃ ?

captura de pantalla 2017-07-28 a las 12 29 32 p m

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ/๋” ์žˆ์Šต๋‹ˆ๊นŒ?

[email protected] ( yarn ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์„ค์น˜ํ–ˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์— ๊ธฐ๋ก์„ ์œ„ํ•ด ์„ค์น˜๋œ ์ข…์†์„ฑ์˜ ์ •ํ™•ํ•œ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

captura de pantalla 2017-07-28 a las 12 25 43 p m

์ฐธ๊ณ : ์ €๋Š” Windows 10 PRO VM์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋‚ด ์ฃผ์š” OS๋Š” ํฌ๋กฌ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” OSX El Capitan์ด๊ธฐ ๋•Œ๋ฌธ์—)
captura de pantalla 2017-07-28 a las 12 22 23 p m

๋‚ด ๋ชจ๋“  ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ๋น„ํ™œ์„ฑํ™”๋œ ๋™์ผํ•œ ๊ฒฐ๊ณผ:

captura de pantalla 2017-07-28 a las 12 34 31 p m

@rogyvoje ๋ฐฉ๊ธˆ ๊ท€ํ•˜์˜ ๊ณผ๊ฑฐ ์˜๊ฒฌ์„ ์ฝ์—ˆ์œผ๋ฉฐ ์ด์ œ ์ฒซ ๋ฒˆ์งธ ๋“œ๋ž˜๊ทธ๊ฐ€ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๋งํ–ˆ๋“ฏ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‘ ๋ฒˆ์งธ ๋“œ๋ž˜๊ทธ๋ฅผ ์‹œ๋„ํ•˜๋ฉด Cannot call hover after drop ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

image

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ๋ชจ๋‘๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด Chrome(60) Mac OS(El Capitan)์—์„œ๋„ ๋™์ผํ•œ ์˜ˆ์ œ๋กœ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ(Mac์šฉ Chrome 59์—๋„ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ) Chrome์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ๊ณณ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค(> =59) iframe์„ ์‚ฌ์šฉํ•  ๋•Œ ๐Ÿ˜‚

@bjrmatos ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์žฌํ˜„ํ•ด ์ฃผ์…”์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค ๐Ÿ˜„
๋‹ค์Œ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ Chrome 61์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋‚˜์š”? ๐Ÿ˜‚

๋‹ค์Œ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ Chrome 61์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋‚˜์š”?

์•„๋งˆ๋„ ์–ด์จŒ๋“  Chrome 59, 60์—์„œ react-dnd๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฉ‹์ง„ ํŒจ์น˜๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‚˜์ค‘์— ์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. https://github.com/react-dnd/react-dnd/pull/820
์ด๋ฏธ ๋ณ‘ํ•ฉ๋˜์—ˆ์ง€๋งŒ ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์ตœ์‹  ํฌ๋กฌ์—์„œ ๊ณ„์† ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค...

@ms88privat #820์€ ์˜ˆ์™ธ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ Chrome(67์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ)์—์„œ iframe์ด ๋ Œ๋”๋ง๋  ๋•Œ source.endDrag ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ์ดˆ๊ธฐ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

3.0 ์ด์ „์—๋Š” @0rvar ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋” ์—„๊ฒฉํ•œ TS ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋‚˜ ๊ฐœ์ธ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@rogyvoje์˜ ํ…Œ์ŠคํŠธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ Video.js ์— endDrag๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const source = {
    beginDrag(props) {
        return {
            renderVideo: true
        };
    },
    // Add end drag
    endDrag(props, monitor) {
        if (!monitor) return;
        // Only gets called when the iframe is already rendered
        console.log("endDrag");
    }
};

์ฒ˜์Œ ๋“œ๋ž˜๊ทธํ•˜๋ฉด Chrome์—์„œ endDrag ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

chrome ๋‚ด๋ถ€ ํŽ˜์ด์ง€์˜ iframe์— ํฌํ•จํ•  ๋•Œ๋„ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค(ํ˜„์žฌ๊นŒ์ง€ 59) @0rvar ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ด ๊ฒฝ์šฐ์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์–ด์ œ ์ถœ์‹œ๋œ ํฌ๋กฌ 72์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰