๋๋๊ทธ ๊ฐ๋ฅํ ํ ์คํธ๊ฐ ์์ง๋ง ๋๋น/๋์ด๊ฐ ์ค์ ํฌ๊ธฐ์ ์ฝ 20%์ธ ํ ์คํธ๋ฅผ ํ์ํ๊ณ ์ถ์ต๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์คํฌ๋ฆฐ์ท์ ์คํ์ผ์ ์ ์ฉํ๋ ค๋ฉด ํฌ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์กฐ์ ํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. ์คํฌ๋ฆฐ์ท ์์ฒด๋ฅผ ๋์์ผ๋ก ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
DragLayer์ ๋ํ ๋ฌธ์๋ฅผ ์ดํด๋ณด์ญ์์ค(http://gaearon.github.io/react-dnd/examples-drag-around-custom-drag-layer.html).
์๋ ํ์ธ์. ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋๊ทธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๊ณ dnd๊ฐ ๋๋ฌด ํฌ๊ฒ ๋ง๋ค๊ณ ์์ต๋๋ค. connectDragPreview์ ์๋ฌด ํจ๊ณผ๋ ์์ด ์ ๋ฌํ๊ธฐ ์ ์ ๋๋น/๋์ด ๋ฐ style.w/h๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ค๊ณ ํ์ต๋๋ค. ๋ฌธ์๋ฅผ ์ ์ ์ด ๋ค์ ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ ์ ๋ํ ์ธ๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ์ค์ html ์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ตฌ์ฑ ์์์ ๊น์์ด ๋ฌปํ ์์ด ์ฝ๊ฒ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฃจ์ ์ connectDragPreview/dragPreview๊ฐ ํฌ๊ธฐ ์กฐ์ ์ต์ ์ ๋ ธ์ถํ ์ ์๋ ๊ฒฝ์ฐ์ ๋๋ค(๋๋ ์ ๋ฌ๋ ์ด๋ฏธ์ง).
๋ค์์ ์๋ํ์ง ์๋ ์ฝ๋์ ๋๋ค. ์ด๋ฏธ์ง ๋๋น์ ๋์ด๋ฅผ ์ค์ ํด๋ onload ํจ์๋ setDragImage ํจ์์์ ์๋ฌด ํจ๊ณผ๊ฐ ์์ต๋๋ค.
componentDidMount = () => {
this.setDragImage();
};
componentDidUpdate = () => {
this.setDragImage();
};
setDragImage = () => {
const ์ด๋ฏธ์ง = ์๋ก์ด ์ด๋ฏธ์ง();
image.src = this.props.imgUrl;
image.onload = () => {
์ด๋ฏธ์ง ๋๋น = ์ด๋ฏธ์ง ๋์ด = 35;
this.props.connectDragPreview(์ด๋ฏธ์ง);
}
};
์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ชจ๋ํฐ ํญ๋ชฉ์ ํตํด ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๋ชจ๋ํฐ ํญ๋ชฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ beginDrag
์ DragSource ์ฌ์์์ ๋ฐ์ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ์ธ ๋ฒ์งธ ์ธ์๋ก ๊ฐ์ ธ์ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค. ๋์ค์ findDOMNode
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋
ธ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋จผ์ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค.
beginDrag({ id }, monitor, component) {
return {
id,
component
};
},
๋์ค์ DragLayer์์ ํญ๋ชฉ์ด ํ์ํฉ๋๋ค.
const CustomDragLayer = DragLayer(monitor => ({
item: monitor.getItem(),
isDragging: monitor.isDragging() // useful
}))(CustomDragLayer);
์ด์ CustomDragLayer ์ํ์์ ๊ตฌ์ฑ ์์๊ฐ ์๋ ํญ๋ชฉ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
class CustomDragLayer extends Component {
constructor(props) {
super(props);
this.width;
this.height;
// Now you can eacily get height or width from node
const node = findDOMNode(props.item.component);
console.log(node.clientWidth);
}
...
๊ณต์ง ๋ฐฉ๋ฒ findDOMNode
์์๋ constructor
, ๊ทธ๊ฒ์์ ์ฌ์ฉ๋์ง ์์ ์ render
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ๋๋๊ทธ ์์ค๋ ์๋ง ์ ์ ํฌ๊ธฐ๊ฐ ์ค์ ํ์๊ฐ ์์ต๋๋ค.
@MrBr , ๊ฐ์ฌํฉ๋๋ค. ์๋ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ชจ๋ํฐ ํญ๋ชฉ์ ํตํด ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๋ชจ๋ํฐ ํญ๋ชฉ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋
beginDrag
์ DragSource ์ฌ์์์ ๋ฐ์ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ์ธ ๋ฒ์งธ ์ธ์๋ก ๊ฐ์ ธ์ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค. ๋์ค์findDOMNode
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ ธ๋๋ฅผ ์ป์ ์ ์์ต๋๋ค.๋ฐ๋ผ์ ๋จผ์ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค.
๋์ค์ DragLayer์์ ํญ๋ชฉ์ด ํ์ํฉ๋๋ค.
์ด์ CustomDragLayer ์ํ์์ ๊ตฌ์ฑ ์์๊ฐ ์๋ ํญ๋ชฉ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๊ณต์ง ๋ฐฉ๋ฒ
findDOMNode
์์๋constructor
, ๊ทธ๊ฒ์์ ์ฌ์ฉ๋์ง ์์ ์render
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ๋๋๊ทธ ์์ค๋ ์๋ง ์ ์ ํฌ๊ธฐ๊ฐ ์ค์ ํ์๊ฐ ์์ต๋๋ค.