A rotund-featured tree part for React.
Demo: https://react-arborist.netlify.app/
Featured Content Ads
add advertising hereThe tree UI is ubiquitous in machine applications. There are loads of tree part libraries for React, nonetheless none were rotund-featured adequate to stand on their possess.
This library offers the total general aspects expected in a tree. You might contain out one or many nodes to pull and tumble into new positions, initiate and shut folders, render an inline invent for renaming, efficiently expose hundreds of objects, and present your possess node renderer to manipulate the vogue.
Set up
npm install react-arborist
Instance
Render the tree data construction.
Featured Content Ads
add advertising here{Node}
);
}
function Node({ ref, styles, data}) {
return (
)
}”>
const data = { id: "The Root", younger other folks: [{id: "Node A"}, {id: "Node B"}] } objective App() { return ( Tree data={data}> {Node} /Tree> ); } objective Node({ ref, styles, data}) { return ( div ref={ref} style={styles.row}> div style={styles.indent}> {data.title} /div> /div> ) }
Contents
Anticipated Files Construction
The Tree part expects the data prop to be a tree-fancy data construction with the following form:
form Files = { id: string, /Required */ younger other folks?: Files[] isOpen?: boolean }
In case your data doesn’t search fancy this, that it is probably you’ll present a childrenAccessor
prop. That it is probably you’ll more than probably moreover moreover present isOpenAccessor
. The associated rate is known as a string or a objective.
Tree childrenAccessor="objects" ...
// Or
Tree childrenAccessor={(node) => node.objects} ...
Tree Ingredient
Unlike other Tree Parts, react-arborist is designed as a managed part. This intention the user will present the tree data and the handlers to update it. The staunch direct managed internally is for run and tumble, different, and bettering.
Prop | Default | Description |
---|---|---|
data | (required) | The tree data construction to render as described above. |
width | 300 | The width of the tree. |
top | 500 | The discontinue of the tree. To dynamically own or now not it is container, use a hook or part to receive the width and top of the Tree’s mum or dad. |
rowHeight | 24 | The discontinue of each row. |
indent | 24 | The different of pixels to indent itsy-bitsy one nodes. |
hideRoot | counterfeit | Cowl the root node so that the most important location of younger other folks appear as the roots. |
onToggle | noop | Handler called when a node is opened or closed. This and the following capabilities must update the data prop for the tree to re-render. |
onMove | noop | Handler called when a user strikes one or extra nodes by dragging and losing. |
onEdit | noop | Handler called when a user performs an inline edit of the node. |
childrenAccessor | “younger other folks” | Broken-down to salvage a node’s younger other folks if they exist on a property rather then “younger other folks”. |
isOpenAccessor | “isOpen” | Broken-down to salvage a node’s openness direct if it exists on a property rather then “isOpen”. |
openByDefault | beautiful | Retract if the node must be initiate or closed when it has an undefined openness direct. |
className | undefined | Provides a class to the containing div. |
The staunch itsy-bitsy one in every of the Tree Ingredient must be a NodeRenderer objective as described below.
const NodeRenderer = ({ innerRef, data, styles, handlers, direct, tree }) => ... const MyApp = () => Tree> {NodeRenderer} /Tree>
Node Renderer Ingredient
The Node Renderer is where you salvage to kill the tree your possess. You entirely possess the vogue and functionality. The props passed to it is miles going to allow you to attain regardless of you need to.
The most general node renderer will search fancy this:
objective NodeRenderer({ innerRef, styles, data, direct, handlers, tree }) { return ( div ref={innerRef} style={styles.row}> div style={styles.indent}>{data.id}/div> /div> ) }
The objective above is passed data for this particular person node, the DOM ref historical for run and tumble, the styles to direct the row within the virtualized list and the styles to indent potentially the most up-to-date node in keeping with its stage within the tree.
Prop | Form | Description |
---|---|---|
data | Node | A single node from the tree data construction equipped. |
innerRef | Ref | Needs to be connected to the root facet returned by the NodeRenderer. That is obligatory for run and tumble to work. |
styles | object | That is an object that accommodates styles for the direct of the row, and the stage of indentation. Every key is described below. |
direct | object | An handful of boolean values that repeat potentially the most up-to-date direct of this node. Survey below for little print. |
handlers | object | A collection of handlers to join to the DOM, that offer selectable and toggle-able behaviors. Every handler is described below. |
tree | TreeMonitor | This object can be historical to salvage on the interior direct of the total tree part. As an illustration, tree.getSelectedNodes() . Your entire methods are listed below within the Tree Prop piece. |
Styles Prop
These are the properties on the styles object passed to the NodeRenderer.
Name | Form | Description |
---|---|---|
row | CSSProperties | Since the tree greatest renders the rows that are for the time being seen, the total rows are completely positioned with a mounted top and left. These styles are on this property. |
indent | CSSProperties | That is merely a left padding location to the stage of the tree multiplied by the tree indent prop. |
Reveal Prop
These are the properties on the direct object passed to the NodeRenderer.
Name | Form | Description |
---|---|---|
isOpen | boolean | Appropriate if this node has younger other folks and the younger other folks are seen. Employ this to disp |