【React】react-beautiful-dnd 拖拽排序功能的实现

如果 react 项目中需要用到拖拽功能,可以使用 react-beautiful-dnd 插件。

1、react-beautiful-dnd 插件github官网链接:https://github.com/atlassian/react-beautiful-dnd/blob/master/docs/about/examples.md

打开后显示下图:

【React】react-beautiful-dnd 拖拽排序功能的实现_第1张图片

2、查看所有范例

点上图中的“All the examples!”,可以查看所有范例(链接:https://react-beautiful-dnd.netlify.app/),如下图:

【React】react-beautiful-dnd 拖拽排序功能的实现_第2张图片

3、代码示例

【React】react-beautiful-dnd 拖拽排序功能的实现_第3张图片

 点击上图中的“Simple horizontal list”, 可以看到代码示例:

【React】react-beautiful-dnd 拖拽排序功能的实现_第4张图片

 index.js代码如下:稍加改造就能直接用到项目中啦~~~

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';

// fake data generator
const getItems = count =>
  Array.from({ length: count }, (v, k) => k).map(k => ({
    id: `item-${k}`,
    content: `item ${k}`,
  }));

// a little function to help us with reordering the result
const reorder = (list, startIndex, endIndex) => {
  const result = Array.from(list);
  const [removed] = result.splice(startIndex, 1);
  result.splice(endIndex, 0, removed);

  return result;
};

const grid = 8;

const getItemStyle = (isDragging, draggableStyle) => ({
  // some basic styles to make the items look a bit nicer
  userSelect: 'none',
  padding: grid * 2,
  margin: `0 ${grid}px 0 0`,

  // change background colour if dragging
  background: isDragging ? 'lightgreen' : 'grey',

  // styles we need to apply on draggables
  ...draggableStyle,
});

const getListStyle = isDraggingOver => ({
  background: isDraggingOver ? 'lightblue' : 'lightgrey',
  display: 'flex',
  padding: grid,
  overflow: 'auto',
});

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: getItems(6),
    };
    this.onDragEnd = this.onDragEnd.bind(this);
  }

  onDragEnd(result) {
    // dropped outside the list
    if (!result.destination) {
      return;
    }

    const items = reorder(
      this.state.items,
      result.source.index,
      result.destination.index
    );

    this.setState({
      items,
    });
  }

  // Normally you would want to split things out into separate components.
  // But in this example everything is just done in one place for simplicity
  render() {
    return (
      
        
          {(provided, snapshot) => (
            
{this.state.items.map((item, index) => ( {(provided, snapshot) => (
{item.content}
)}
))} {provided.placeholder}
)}
); } } // Put the thing into the DOM! ReactDOM.render(, document.getElementById('root'));

你可能感兴趣的:(ReactJs,react.js)