文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

react-beautiful-dnd如何实现组件拖拽

2023-06-20 20:49

关注

这篇文章将为大家详细讲解有关react-beautiful-dnd如何实现组件拖拽,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.安装

在已有react项目中 执行以下命令 so easy。

# yarnyarn add react-beautiful-dnd # npmnpm install react-beautiful-dnd --save

2.APi

详情查看 官方文档。

3.react-beautiful-dnd demo

1 demo1 纵向组件拖拽

效果下图:

react-beautiful-dnd如何实现组件拖拽

demo1.gif

实现代码:

import React, { Component } from "react";import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; //初始化数据const getItems = count =>  Array.from({ length: count }, (v, k) => k).map(k => ({    id: `item-${k + 1}`,    content: `this is content ${k + 1}`  })); // 重新记录数组顺序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 0 ${grid}px 0`,   // 拖拽的时候背景变化  background: isDragging ? "lightgreen" : "#ffffff",   // styles we need to apply on draggables  ...draggableStyle}); const getListStyle = () => ({  background: 'black',  padding: grid,  width: 250});   export default class ReactBeautifulDnd extends Component {  constructor(props) {    super(props);    this.state = {      items: getItems(11)    };    this.onDragEnd = this.onDragEnd.bind(this);  }   onDragEnd(result) {    if (!result.destination) {      return;    }     const items = reorder(      this.state.items,      result.source.index,      result.destination.index    );     this.setState({      items    });  }    render() {    return (      <DragDropContext onDragEnd={this.onDragEnd}>        <center>          <Droppable droppableId="droppable">            {(provided, snapshot) => (              <div              //provided.droppableProps应用的相同元素.                {...provided.droppableProps}                // 为了使 droppable 能够正常工作必须 绑定到最高可能的DOM节点中provided.innerRef.                ref={provided.innerRef}                style={getListStyle(snapshot)}              >                {this.state.items.map((item, index) => (                  <Draggable key={item.id} draggableId={item.id} index={index}>                    {(provided, snapshot) => (                      <div                        ref={provided.innerRef}                        {...provided.draggableProps}                        {...provided.dragHandleProps}                        style={getItemStyle(                          snapshot.isDragging,                          provided.draggableProps.style                        )}                      >                        {item.content}                      </div>                    )}                  </Draggable>                ))}                {provided.placeholder}              </div>            )}          </Droppable>        </center>      </DragDropContext>    );  }}

2 demo2 水平拖拽

效果下图:

react-beautiful-dnd如何实现组件拖拽

demo2.gif

实现代码: 其实和纵向拖拽差不多 Droppable 中 多添加了一个排列顺序的属性,direction="horizontal"

import React, { Component } from "react";import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";  const getItems = count => (  Array.from({ length: count }, (v, k) => k).map(k => ({    id: `item-${k + 1}`,    content: `this is content ${k + 1}`  }))) // 重新记录数组顺序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 `,   // 拖拽的时候背景变化  background: isDragging ? "lightgreen" : "#ffffff",   // styles we need to apply on draggables  ...draggableStyle}); const getListStyle = () => ({  background: 'black',  display: 'flex',  padding: grid,  overflow: 'auto',});  class ReactBeautifulDndHorizontal extends Component {  constructor(props) {    super(props);    this.state = {      items: getItems(10)    };    this.onDragEnd = this.onDragEnd.bind(this);  }   onDragEnd(result) {    if (!result.destination) {      return;    }     const items = reorder(      this.state.items,      result.source.index,      result.destination.index    );     this.setState({      items    });  }   render() {    return (      <DragDropContext onDragEnd={this.onDragEnd}>        <Droppable droppableId="droppable" direction="horizontal">          {(provided, snapshot) => (            <div              {...provided.droppableProps}              ref={provided.innerRef}              style={getListStyle(snapshot.isDraggingOver)}            >              {this.state.items.map((item, index) => (                <Draggable key={item.id} draggableId={item.id} index={index}>                  {(provided, snapshot) => (                    <div                      ref={provided.innerRef}                      {...provided.draggableProps}                      {...provided.dragHandleProps}                      style={getItemStyle(                        snapshot.isDragging,                        provided.draggableProps.style                      )}                    >                      {item.content}                    </div>                  )}                </Draggable>              ))}              {provided.placeholder}            </div>          )}        </Droppable>      </DragDropContext>    )  }} export default ReactBeautifulDndHorizontal

3 demo3实现一个代办事项的拖拽(纵向 横向拖拽)

react-beautiful-dnd如何实现组件拖拽

关于“react-beautiful-dnd如何实现组件拖拽”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯