电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

react實現記錄拖動排序

瀏覽:4日期:2022-06-13 11:14:30

最近項目中要做一個拖動排序功能,首先想到的是之前項目中用過的antd自帶的tree和table的拖動排序,但是只能在對應的組建里使用。這里用的是自定義組件,隨意拖動排序,所以記錄一下實現流程

react-dnd antd組件的拖動排序都是用的這個庫,使用比較靈活,但是要配置的東西比較多,需求復雜時使用這個庫;class BodyRow extends React.Component { render() { const { isOver, connectDragSource, connectDropTarget, moveRow, ...restProps } = this.props; const style = { ...restProps.style, cursor: 'move' }; let { className } = restProps; if (isOver) { if (restProps.index > dragingIndex) {className += ' drop-over-downward'; } if (restProps.index < dragingIndex) {className += ' drop-over-upward'; } } return connectDragSource( connectDropTarget(<tr {...restProps} className={className} style={style} />), ); }}const rowSource = { beginDrag(props) { dragingIndex = props.index; return { index: props.index, }; },};const rowTarget = { drop(props, monitor) { const dragIndex = monitor.getItem().index; const hoverIndex = props.index; // Don't replace items with themselves if (dragIndex === hoverIndex) { return; } // Time to actually perform the action props.moveRow(dragIndex, hoverIndex); // Note: we're mutating the monitor item here! // Generally it's better to avoid mutations, // but it's good here for the sake of performance // to avoid expensive index searches. monitor.getItem().index = hoverIndex; },};const DragableBodyRow = DropTarget('row', rowTarget, (connect, monitor) => ({ connectDropTarget: connect.dropTarget(), isOver: monitor.isOver(),}))( DragSource('row', rowSource, connect => ({ connectDragSource: connect.dragSource(), }))(BodyRow),);<DndProvider backend={HTML5Backend}> <Table columns={columns} dataSource={this.state.data} components={this.components} onRow={(record, index) => ({ index, moveRow: this.moveRow, })} /></DndProvider>react-beautiful-dnd 在項目中看到引用了這個庫,使用起來也不算復雜,就試著用了這個庫,不過只支持水平或垂直拖動,一行或者一列元素時可以使用,可惜這個需求時兩行多列元素,也沒辦法用;<DragDropContext onDragEnd={this.onDragEnd}> <Droppable droppableId='phone-droppable'> {droppableProvided => ( <div ref={droppableProvided.innerRef} {...droppableProvided.droppableProps}>{this.state.phoneImages.map((image, index) => ( <Draggable key={image||'upload'} draggableId={image||'upload'} index={index}> {(provided, snapshot) => ( <divref={provided.innerRef}{...provided.draggableProps}{...provided.dragHandleProps}style={{ ...provided.draggableProps.style, opacity: snapshot.isDragging ? 0.8 : 1, display: 'inline-block'}} ><img src={img}/> </div> )} </Draggable>))}{droppableProvided.placeholder} </div> )} </Droppable></DragDropContext>react-sortable-hoc 最后在網上搜索的時候,又看到這個庫,使用起來比較簡單,使用SortableList包裹要拖拽元素的容器,SortableElement包裹要拖拽的子元素,設置容器拖拽方向axis={'xy'}即可使grid布局的多個元素支持水平和豎直方向拖動排序;const SortableItem = SortableElement(({children}) => ( <div>{children}</div>));const SortableList = SortableContainer(({children}) => { return ( <div style={{display: 'grid', gridTemplateRows: '117px 117px', gridTemplateColumns: '120px 120px 120px 120px'}}> {children} </div> );});<SortableList onSortEnd={this.onPadSortEnd} helperClass={Styles.sortableHelper} axis={'xy'}> {this.state.padImages.map((image, index) => ( <SortableItem key={`pad-item-${index}`} index={index} className={Styles.sortableItem}> <img src={img}/> </SortableItem> ))}</SortableList>

好久沒更新博客了,最近工作比較忙,差不多每天都要加班,中間有經歷搬家,沒時間坐下來總結學到的東西。工作的時候因為這塊花費了一些時間,想到可能別人也會遇到類似問題,所以就記錄下來了

到此這篇關于react實現記錄拖動排序的文章就介紹到這了,更多相關react記錄拖動排序內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
主站蜘蛛池模板: 湖南自考_湖南自学考试| 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 盘煤仪,盘料仪,盘点仪,堆料测量仪,便携式激光盘煤仪-中科航宇(北京)自动化工程技术有限公司 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 湿地保护| 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 |