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
打開后顯示下圖:
2、查看所有范例
點上圖中的“All the examples!”,可以查看所有范例(鏈接:https://react-beautiful-dnd.netlify.app/)
如下圖:
3、代碼示例
點擊上圖中的“Simple horizontal list”
可以看到代碼示例:
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 ( <DragDropContext onDragEnd={this.onDragEnd}> <Droppable droppableId="droppable" direction="horizontal"> {(provided, snapshot) => ( <div ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)} {...provided.droppableProps} > {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> ); } } // Put the thing into the DOM! ReactDOM.render(<App />, document.getElementById('root'));
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
30分鐘精通React今年最勁爆的新特性——React Hooks
這篇文章主要介紹了30分鐘精通React今年最勁爆的新特性——React Hooks,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03React-router中結合webpack實現按需加載實例
本篇文章主要介紹了React-router中結合webpack實現按需加載實例,非常具有實用價值,需要的朋友可以參考下2017-05-05windows下create-react-app 升級至3.3.1版本踩坑記
這篇文章主要介紹了windows下create-react-app 升級至3.3.1版本踩坑記,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02React useContext與useReducer函數組件使用
useContext和useReducer 可以用來減少層級使用, useContext,可以理解為供貨商提供一個公共的共享值,然后下面的消費者去接受共享值,只有一個供貨商,而有多個消費者,可以達到共享的狀態(tài)改變的目的2023-02-02