React 컴포넌트/Div를 드래그 가능하게 만들기

Oluwafisayo Oluwatayo 2023년1월30일
  1. onMouse를 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기
  2. React-Draggable 종속성을 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기
  3. 아름다운 DnD로 React Component/Div를 드래그 가능하게 만들기
  4. 결론
React 컴포넌트/Div를 드래그 가능하게 만들기

이제 웹사이트 빌더가 되거나 취미로 웹사이트 제작을 선택하는 것이 재미있습니다. 마치 직소 퍼즐처럼 마우스를 사용하여 콘텐츠를 선택하고 정렬하는 것만으로 웹사이트를 구축할 수 있습니다.

사용자가 항목을 쉽게 끌어다 놓을 수 있는 콘텐츠나 앱을 만들면 앱 초보자도 쉽게 사용할 수 있어 시장에서 앱의 폭넓은 수용으로 이어질 수 있습니다.

React에서 앱이나 게임을 빌드할 때 콘텐츠를 끌어다 놓는 기능을 사용하면 이러한 작업, 심지어 더 복잡한 작업을 쉽고 빠르게 완료할 수 있습니다.

구성 요소를 드래그 가능하게 만드는 방법을 배우는 데 도움이 되는 예제를 살펴보겠습니다.

onMouse를 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기

React draggable 기능은 수많은 이벤트 리스너를 활용하지만 이 예제에서는 onMouseDown, onMouseMoveonMouseUp의 세 가지를 활용합니다.

우리는 새로운 React 프로젝트를 만드는 것으로 시작합니다. VS Code에서 터미널을 열고 npx create-react-app dragon을 입력합니다.

그런 다음 dragon 폴더로 이동하여 두 개의 폴더를 만듭니다. 첫 번째 폴더의 이름은 Main이고 그 안에 MainApp.jsMainApp.css 파일이 생성됩니다.

이 파일에는 홈페이지용 코드가 포함됩니다.

두 번째 폴더의 이름은 Components이고 그 안에 Dialog.jsDialog.css라는 두 개의 파일이 있습니다. 이것은 브라우저 화면에서 드래그하려는 구성 요소입니다.

MainApp.js 내부에 다음 코드를 입력합니다.

코드 조각(MainApp.js):

import React, { Component } from 'react';
import './MainApp.css';
import Dialog from '../Components/Dialog';


export default class MainApp extends Component {
    constructor(props) {
        super(props);

        this.state = {
            showDialog: false
        }
    }

    _showDialog() {
        this.setState({showDialog: !this.state.showDialog});
    }

    render() {

        return (
            <div className='MainApp'>
                <div className='Title'>Example Dialog Popper</div>
                <div className='button' onClick={this._showDialog.bind(this)}> Show Dialog </div>
                <Dialog onClose={this._showDialog.bind(this)} show={this.state.showDialog}/>
            </div>
        );
    }
}

이 페이지에서 Show Dialog 버튼을 클릭하면 onClick 이벤트 리스너가 활성화되고 드래그하려는 구성 요소가 팝업됩니다.

MainApp.css에는 페이지를 아름답게 하는 스타일이 포함되어 있습니다.

코드 조각(MainApp.css):

.Title {
    font-weight: bold;
    font-size: 16px;
    padding-top: 30px;
}

.button {
    font-size: 12px;
    width: 100px;
    color: black;
    border: 2px solid black;
    border-radius: 30px;
    padding: 10px;
    margin: 10px;
    margin-left: 650px;
}

.MainApp {
    background-color: lightsalmon;
    height: 1000px;
}

드래그 가능한 구성 요소를 만드는 이 예제의 가장 좋은 부분으로 이동합니다. Dialog.js로 이동하여 몇 가지 코딩을 수행합니다.

코드 조각(Dialog.js):

import React, { Component } from 'react';
import './Dialog.css';

export default class Dialog extends Component {
    constructor(props) {
        super(props);

        this.state = {
            diffX: 0,
            diffY: 0,
            dragging: false,
            styles: {}
        }

        this._dragStart = this._dragStart.bind(this);
        this._dragging = this._dragging.bind(this);
        this._dragEnd = this._dragEnd.bind(this);
    }

    _dragStart(e) {
        this.setState({
            diffX: e.screenX - e.currentTarget.getBoundingClientRect().left,
            diffY: e.screenY - e.currentTarget.getBoundingClientRect().top,
            dragging: true
        });
    }

    _dragging(e) {

        if(this.state.dragging) {
            var left = e.screenX - this.state.diffX;
            var top = e.screenY - this.state.diffY;

            this.setState({
                styles: {
                    left: left,
                    top: top
                }
            });
        }
    }

    _dragEnd() {
        this.setState({
            dragging: false
        });
    }

    render() {
        var classes = this.props.show ? 'Dialog' : 'Dialog hidden';
        return (
            <div className={classes} style={this.state.styles} onMouseDown={this._dragStart} onMouseMove={this._dragging} onMouseUp={this._dragEnd}>
                <div className='DialogTitle'>My Dialog</div>
                <div className='Contents'>
                    Contents of the Dialog:
                        - one
                        - two
                        - three
                </div>
                <div className='closeButton' onClick={this.props.onClose}>
                    Close
                </div>
            </div>
        );
    }
}

모든 상황에서 구성 요소가 되기를 원하는 상태를 정의합니다. 기본 상태에서 구성 요소는 아무데도 움직이지 않으며 드래그를 false로 설정합니다.

그런 다음 구성 요소가 있을 세 가지 상태, 즉 dragStart, dragdragEnd를 바인딩하고 각각에 맞는 onMouse 이벤트 리스너에 할당합니다. onMouseDown은 구성 요소에 마우스를 놓으면 활성화되고 _dragStart에 할당된 기능이 작동합니다.

onMouseMove는 구성 요소가 드래그되고 있음을 나타내며 _draging에 할당된 기능을 활성화합니다.

마지막으로 onMouseUp은 마우스가 구성 요소에 더 이상 배치되지 않았음을 나타냅니다. 이것은 _dragEnd에 연결된 기능을 활성화합니다.

Dialog.css는 드래그 가능한 구성 요소의 스타일을 지정하는 코드가 수행되는 곳입니다.

코드 조각(Dialog.css):

.Dialog {
    width: 400px;
    height: 400px;
    background-color: lightblue;
    border-radius: 10px;
    border: 3px solid grey;
    position: absolute;
    cursor: move;
    top: 150px;
    left: 520px;
}

.hidden {
    display: none;
}

.DialogTitle {
    font-weight: bold;
    padding-top: 10px;
    padding-bottom: 10px;
    border-bottom: 3px solid grey;
}

.Contents {
    padding-top: 50px;
    padding-bottom: 200px;
}

.closeButton {
    font-size: 12px;
    width: 100px;
    color: black;
    border: 2px solid black;
    border-radius: 25px;
    padding: 10px;
    margin: 10px;
    margin-left: 140px;
    cursor: pointer;
}

그런 다음 MainApp을 다음과 같이 App.js로 가져옵니다.

코드 조각(App.js):

import React from 'react';
import './App.css';
import MainApp from './Main/MainApp.js';

function App() {
  return (
    <div className="App">
      <MainApp />
    </div>
  );
}

export default App;

출력:

onMouse로 드래그 가능한 구성 요소 div 반응

React-Draggable 종속성을 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기

반응의 종속성을 활용하여 구성 요소를 드래그 가능하게 만들 수도 있습니다. npx create-react-app dragtwo로 새 프로젝트를 만든 후.

종속성을 설치하기 위해 dragtwo 폴더로 이동합니다. 터미널에서 npm install react-draggable을 입력합니다.

그런 다음 App.js로 이동하여 약간의 코딩을 수행합니다.

코드 조각(App.js):

import logo from './logo.svg';
import './App.css';
import Draggable from "react-draggable";

function App() {
  return (
    <Draggable>
      <img
      src="https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350"
      alt="new"
      />
    </Draggable>
  );
}

export default App;

출력:

react-dragable 종속성을 사용하여 드래그 가능한 반응 구성 요소 div

먼저 react-draggable에서 Draggable을 가져옵니다. 그런 다음 드래그할 수 있는 구성 요소를 만듭니다.

그런 다음 이 구성 요소를 <Draggable></Draggable> 태그 안에 래핑합니다.

아름다운 DnD로 React Component/Div를 드래그 가능하게 만들기

React의 Beautiful DnD 종속성은 구성 요소를 드래그 가능하게 만드는 데 사용할 수 있는 또 다른 간단하고 사용하기 쉬운 라이브러리입니다.

부팅하려면 먼저 반응 구성 요소를 만든 다음 install react-beautiful-dnd --save를 사용하여 종속성을 설치하기 위해 프로젝트 폴더로 이동합니다.

다음으로 App.js 파일을 열고 다음 코드를 입력합니다.

코드 조각(App.js):

import React, { useState } from 'react';
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
import './App.css';

const finalSpaceCharacters = [
  {
    id: 'james',
    name: 'James',
  },
  {
    id: 'john',
    name: 'John',
  },
  {
    id: 'israel',
    name: 'Israel',
  },
  {
    id: 'joker',
    name: 'Joker',
  },
  {
    id: 'quinn',
    name: 'Quinn',
  }
]

function App() {
  const [characters, updateCharacters] = useState(finalSpaceCharacters);

  function handleOnDragEnd(result) {
    if (!result.destination) return;

    const items = Array.from(characters);
    const [reorderedItem] = items.splice(result.source.index, 1);
    items.splice(result.destination.index, 0, reorderedItem);

    updateCharacters(items);
  }

  return (
    <div className="App">
      <header className="App-header">
        <h1>Final Space Characters</h1>
        <DragDropContext onDragEnd={handleOnDragEnd}>
          <Droppable droppableId="characters">
            {(provided) => (
              <ul className="characters" {...provided.droppableProps} ref={provided.innerRef}>
                {characters.map(({ id, name }, index) => {
                  return (
                    <Draggable key={id} draggableId={id} index={index}>
                      {(provided) => (
                        <li ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>

                          <p>
                            {name}
                          </p>
                        </li>
                      )}
                    </Draggable>
                  );
                })}
                {provided.placeholder}
              </ul>
            )}
          </Droppable>
        </DragDropContext>
      </header>
    </div>
  );
}

export default App;

출력:

아름다운 dnd로 드래그 가능한 구성 요소 div 반응

부팅하려면 먼저 끌어서 재정렬해야 하는 이름 배열을 만듭니다. 그런 다음 splice 방법을 사용하여 항목을 해당 위치에서 제거하면 자동으로 다음 항목으로 대체됩니다.

다음으로, 항목의 끌어서 놓기를 처리하는 함수를 만듭니다. 구성 요소를 끌기 위한 함수를 만든 후 <Draggable></Draggable> 태그 안에 이러한 모든 함수를 래핑합니다.

항목을 놓기 위한 함수를 만들고 <Droppable></Droppable> 내부의 draggable 태그에 있는 함수를 포함하여 래핑한 다음 <DragDropContext></DragDropContext> 안에 이 모든 것을 래핑합니다. 태그.

결론

React의 유연성은 거의 모든 프로젝트를 가능하고 간단하게 만들 수 있습니다. React 드래그 기능은 사용자를 위한 게임 및 사용하기 쉬운 앱을 만드는 데 유용합니다.

Oluwafisayo Oluwatayo avatar Oluwafisayo Oluwatayo avatar

Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.

LinkedIn

관련 문장 - React Component