A dynamically created element component based on react.🍻🍻🍻
$ npm install dynamic-create-element --registry=https://registry.npmjs.org
use in webpack
import { DynamicCreateElement } from "dynamic-create-element";
const Example = () => {
return (
<div {{ width: '100px', height: '100px', border: '1px solid #f00' }}>
<DynamicCreateElement
style={{ height: "100%" }}
target={<div style={{ backgroundColor: 'greenyellow' }}></div>}
>
<div className="elementContainer"></div>
</DynamicCreateElement>
</div>
);
};
export default Example;
use with react-grid-layout
import ReactGridLayout from "react-grid-layout";
import { DynamicCreateElement } from "dynamic-create-element";
import "react-grid-layout/css/styles.css";
import "react-resizable/css/styles.css";
const layoutConfig = {
cols: 12,
rowHeight: 30,
width: 1200,
};
const layout = [
{ i: "1", x: 0, y: 0, w: 1, h: 2 },
{ i: "2", x: 1, y: 0, w: 3, h: 2 },
{ i: "3", x: 4, y: 0, w: 1, h: 2 },
];
const Example = () => {
const { cols, rowHeight, width } = layoutConfig;
const onBeforeElementCreate = e => {
const { key, props: { layout: elemLayout, style } } = e.vDOM;
console.log(key, elemLayout, style);
};
return (
<div className="App">
<DynamicCreateElement
grid={{
rowHeight,
columns: cols,
freezeWidth: width,
}}
onBeforeElementCreate={onBeforeElementCreate}
>
<ReactGridLayout
className="layout"
layout={layout}
...layoutConfig
>
{layout.map((item) => {
return <div key={item.i}></div>;
})}
</ReactGridLayout>
</DynamicCreateElement>
</div>
);
};
export default Example;
-
children
The component can only have one parent node, and new elements will be created under the parent node. -
target
Rendered components -
active
Activate the function of the current component (defaulttrue
). -
onBeforeElementCreate(event)
Called before the new component is created, through this callback function, you can implement some advanced operations.
event.vDOM
Virtual DOM of the new component to be created.event.preventDefault()
After using this method, no new elements will be created after the operation (you can customize some operations).
-
onAfterElementCreate(children)
Called after the new component is created, returning the new react child component.
-
grid
use grid layout.
- columns: Number of grid columns.
- rowHeight: The row height of elements in the grid layout.
- space: The spacing between elements (pixels, default value 10)
- freezeWidth: The width of the container of the grid layout. If not set this argument, the current width of the container will default to the so-called total width of the child node.
🚩 More useful features will be added in the future.
react: ^16.10.2
react-dom: ^16.10.2
In the next major version (1.0.*), we will refactor the components and make major destructive changes. At the same time, we will support more rich scenes and functions.