react-grid-layout实现拖拽,网格布局


安装 react-grid-layout
npm install react-grid-layout
import React, { Component } from 'react';
import { Responsive, WidthProvider } from 'react-grid-layout';
import EUevent from '@/components/eventcomponent/EUevent';
import Map from '../chart/plantmap';
import EchartsBar from '../chart/BarChart';
import EchartsLine from '../chart/LineChart';
import EchartsPie from '../chart/PieChart';
import { message } from 'antd';
const ResponsiveGridLayout = WidthProvider(Responsive);
const CPhomepage_title = {
    display: 'flex',
    justifyContent: 'space-between',
    alignItems: 'center',
    lineHeight: '40px',
    padding: '0 20px',
    color: '#686868'
}
const CPhomepage_num = {
    lineHeight: '190px',
    fontSize: '50px',
    color: '#1F1F1F',
    textAlign: 'center'
}
class EUindex extends Component {
    constructor(props) {
        super(props);
        this.state = {
            isEUorCP: 'CP',
            EUlayout: [
                { i: 'g', x: 0, y: 0, w: 6, h: 10 },
                { i: 'a', x: 0, y: 0, w: 6, h: 10 },
                { i: 'b', x: 6, y: 0, w: 6, h: 10 },
                { i: 'c', x: 0, y: 10, w: 3, h: 10 },
                { i: 'd', x: 3, y: 10, w: 3, h: 10 },
                { i: 'e', x: 6, y: 10, w: 3, h: 10 },
                { i: 'f', x: 9, y: 10, w: 3, h: 10 }
            ]
        };
    }
    UNSAFE_componentWillMount() {
        this.getUserInfo()
    };
    componentWillUnmount() {
        // componentWillMount进行异步操作时且在callback中进行了setState操作时,需要在组件卸载时清除state
        this.setState = () => {
            return;
        };
    }
    getUserInfo=()=>{
        var _EUlayoutArr = JSON.parse(localStorage.getItem("EUlayoutArr"))
        if (_EUlayoutArr === null || _EUlayoutArr === undefined) {
            console.log("--null----")
            this.setState({
                EUlayout: [
                    { i: 'g', x: 0, y: 0, w: 6, h: 10 },
                    { i: 'a', x: 0, y: 0, w: 6, h: 10 },
                    { i: 'b', x: 6, y: 0, w: 6, h: 10 },
                    { i: 'c', x: 0, y: 10, w: 3, h: 10 },
                    { i: 'd', x: 3, y: 10, w: 3, h: 10 },
                    { i: 'e', x: 6, y: 10, w: 3, h: 10 },
                    { i: 'f', x: 9, y: 10, w: 3, h: 10 }
                ]
            })
        }
        else {
            console.log("youzhi----")
            this.setState({
                EUlayout: _EUlayoutArr
            })
            // this.state.EUlayout = _EUlayoutArr
        }
    }
    //存储拖拽移动的位置到缓存
    onLayoutChange = (layout) => {
        console.log(layout, "=----layout----")
        let EUlayoutArr = [];
        var index = -1;
        localStorage.removeItem('CPlayoutArr')
        layout.forEach(({ i, x, y, w, h }) => {
            index++;
            EUlayoutArr[index] = { i, x, y, w, h }
        })
        localStorage.setItem('EUlayoutArr', JSON.stringify(EUlayoutArr))
    }
    render() {
        return (
            <>
                <div className="dashboardContent">
                <ResponsiveGridLayout className="layout" layouts={{ lg: this.state.EUlayout }} rowHeight={30}
                    breakpoints={{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}
                    cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}
                    isResizable={false}
                    onLayoutChange={this.onLayoutChange}
                    margin={[8, 8]}
                >
                    <div className='dragcontent' key="g">
                        <div id='dragcontent_a'>设备分布</div>
                        <Map title="map" />
                    </div>
                    <div className='dragcontent' key="a">
                        <div id='dragcontent_a'>最新事件列表</div>
                        <EUevent/>
                    </div>
                    <div className='dragcontent' key="b">
                        <div id='dragcontent_a'>事件统计(最近七天)</div>
                        <EchartsLine />
                    </div>
                    <div className='dragcontent' key="c">
                        <div id='dragcontent_a'>可用性指标</div>
                        <EchartsPie content={1} />
                    </div>
                    <div className='dragcontent' key="d">
                        <div id='dragcontent_a'>环境指标</div>
                        <EchartsPie content={2} />
                    </div>
                    <div className='dragcontent' key="e">
                        <div id='dragcontent_a'>可靠性指标</div>
                        <EchartsPie content={3} />
                    </div>
                    <div className='dragcontent' key="f">
                        <div id='dragcontent_a'>负荷指标</div>
                        <EchartsPie content={4} />
                    </div>
                </ResponsiveGridLayout>
                </div>
            </>
        );
    }
}
export default EUindex;
react-grid-layout实现拖拽,网格布局的更多相关文章
- React造轮子:拖拽排序组件「Dragact」
		
先来一张图看看: 项目地址:Github地址 (无耻求星!) 在线观看(第一次加载需要等几秒):预览地址 说起来不容易,人在国外没有过年一说,但是毕竟也是中国年,虽然不放假,但是家里总会主内一顿丰盛的 ...
 - jQuery图片列表拖拽排序布局
		
在线演示 本地下载
 - CSS Grid 网格布局教程
		
一.概述 网格布局(Grid)是最强大的 CSS 布局方案. 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局.以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了. 上 ...
 - React.js实现原生js拖拽效果及思考
		
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
 - Dev Grid拖拽移动行
		
效果图 源码下载 拖拽时带行截图效果实现代码 /// <summary> /// 拖拽帮助类 /// </summary> public static class DragHe ...
 - React Editor 应用编辑器(1) - 拖拽功能剖析
		
这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ...
 - 鸿蒙的js开发部模式16:鸿蒙布局Grid网格布局的应用一
		
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.Grid简介2.使用Grid布局实现的效果3.grid-row-gap和grid-colunm-gap属性4.< ...
 - Grid 网格布局详解
		
Grid网格布局详解: Grid布局与Flex布局有着一定的相似性,Grid布局是将容器划分成行和列,产生单元格,可以看做是二维布局. 基本概念: 采用网格布局的区域,称为"容器" ...
 - Vue-Grid-Layout分享一款好用的可拖拽组件
		
在使用Grafana的过程中,发现Grafana关于视图页面中每一个面板都可拖拽,可随意放大放小,体验非常棒,F12看了Grafana的代码,看打包后的代码很像react,进一步css,看到有grid ...
 - RecyclerView拖拽排序和滑动删除实现
		
效果图 如何实现 那么是如何实现的呢?主要就要使用到ItemTouchHelper ,ItemTouchHelper 一个帮助开发人员处理拖拽和滑动删除的实现类,它能够让你非常容易实现侧滑删除.拖拽的 ...
 
随机推荐
- 用 Python 获取百度搜索结果链接
			
前言 近期有许多项目需要这个功能,由于Python实现起来比较简单就这么做了,代码贴下来觉得好点个赞吧~ 代码 # coding: utf-8 import os import time import ...
 - Java 多线程 --死锁及解决方案
			
在java 多线程中 过多的同步造成相互不释放资源 从而相互等待,造成死锁线现象,一般发生于同步中持有多个对象锁 如以下代码: public class DeadLock { public stati ...
 - Python模块---制作新冠疫情世界地图()
			
目录 pyecharts模块 简介 安装pyecharts 测试pyecharts模块 pyecharts实战:绘制新冠肺炎疫情地图 需求分析 请求数据 提取数据 处理数据 制作可视化地图 设置可视化 ...
 - javascript-如何获取标签的内容
			
<input>标签的: document.getElementById("id").value ; 其他文本标签的: document.getElementById(& ...
 - 解决QQ可以登录但是网页打不卡 ,提示代理服务器拒绝连接 的问题。
 - kubernetes (一)使用Rancher搭建集群
			
目录 如何快速高效部署K8s集群 Rancher是什么 为什么是Rancher 1.0.安装Rancher 1.1.环境 1.2.选择Rancher版本 1.3.拉取镜像 2.0.容器启动高级选项 2 ...
 - Python学习15之python内置六大标准类型
			
1.六大标准类型:数值型,str,list,set,tuple,dic 2.数值型:int,float,bool,complex 3.区别: 1)数值型和str,tuple都是不可变类型 而list, ...
 - Linux系统管理第五次作业 LVM逻辑卷 磁盘配额
			
1.为主机增加80G SCSI 接口硬盘 2.划分三个各20G的主分区 [root@localhost ~]# fdisk /dev/sdf 欢迎使用 fdisk (util-linux 2.23.2 ...
 - Java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)
			
JAVA并发包中有三个类用于同步一批线程的行为,分别是闭锁(Latch),信号灯(Semaphore)和栅栏(CyclicBarrier).本贴主要说明闭锁(Latch)和栅栏(CyclicBarri ...
 - python- 函数高级
			
函数高级 一.默认参数 1.默认参数概念 默认参数指函数/方法在定义时为形参赋值,对应的形参称为默认参数. 默认参数是一个参数定义期的概念,与调用无关. 2.默认参数的作用 如果参数定义默认参数,在调 ...