react tree 可拖動樹結構:

github地址:
github地址:react-sortable-tree
安裝:
NPM
npm install react-sortable-tree –save
YARN
yarn add react-sortable-tree
引用
import SortableTree from ‘react-sortable-tree’;
import ‘react-sortable-tree/style.css’;
使用
此處我是做成可公共組件props可傳data數據調用的公用組件.
export default class SortableTrees extends React.PureComponent {
// 定義propTypes傳輸類型:
static propTypes = {
isDrop: PropTypes.bool, // 是否可以拖動
treeData: PropTypes.array, // 樹結構數據
onChangeVal: PropTypes.func, // 值改變觸發事件
haveChildren: PropTypes.bool, // 是否有子級
};
// 設置默認值
static defaultProps = {
isDrop: true,
haveChildren: true,
treeData: [{
title: 'Workflow test',
expanded: true,
children: [{
title: 'taskflow test',
}, {
title: 'taskflow test1',
expanded: true,
children: [{
title: 'taskflow2-1',
}, {
title: 'taskflow2-2',
}],
}],
}],
onChangeVal: () => {},
};
//調用組件時,值發生改變接收新的數據
onChangeValue = (treeData) => {
this.props.onChangeVal(JSON.stringify(treeData));
}
//是否可以拖動(默認可以不添加, 根據需求而定)
stopParentNode = (node) => {
if (!node.nextParent) {
return false;
}
return true;
}
//是否有子級(默認可以不添加, 根據需求而定)
toHaveChildren = (node) => {
if (node.type === 'streaming') {
return false;
}
return true;
}
// render
render() {
const {
isDrop,
treeData,
haveChildren,
} = this.props;
return (
<SortableTree
treeData={treeData}
onChange={(e) => { this.onChangeValue(e); }}
canDrop={isDrop ? this.stopParentNode : () => { return false; }}
canNodeHaveChildren={haveChildren ? this.toHaveChildren : () => { return false; }}
/>
);
}
}
外部調用此組件
<SortableTrees
treeData={treeData} // treeData是你自己的數據
onChangeVal={(treeDatas) => { this.setTreeData(treeDatas); }}
/>
Props 參數
treeData (object): 樹結構數據
onChange (func): 數據發生改變時觸發(例如:拖動)
getNodeKey (func): 數據更改時,得到node節點
generateNodeProps (func): 添加自定義結構
onMoveNode (func): 移動node觸發
onVisibilityToggle (func): 子節點收起或展開時觸發
onDragStateChanged (func): 拖動開始或結束時調用
maxDepth (number): 可以插入最大深度節點。 默認為無限
rowDirection (string): 行方向
canDrag (func or bool): 是否禁止拖動
canDrop: (func): 返回false以防止節點掉入給定位置
canNodeHaveChildren: (func): 是否有自己功能
theme (object): 主題風格
searchMethod (func): 搜索功能
className (string): class
rowHeight (number or func): 行高
