The main concept is to render value
, maybe modify when we need to. Render it in right way, you'll see the webpage you built with no code. And if you konw the data structure of value
, you can modify it to whatever you want.
This value
consists of component
, not the other thing we use in react. It's an object to save data.
/**
* component example
*
* id: string, should be unique.
* name: string, use to determine the ComponentClass we render.
* props: object, the props for ComponentClass to render with.
*
*/
const component = {
id: 'compoent-1',
name: 'div',
props: {
style: {
color: 'red',
},
},
};
/**
* value example
*
* componentMap: object, stor all components data,key means the id of component,value means the data of component.
* relationMap: object, store the association between components,key means the id of component.
* rootComponentIds: array, means the components you render for root.
*
*/
const value = {
componentMap: {
'parent-1': {
id: 'parent-1',
name: 'div',
props: {
style: {
fontSize: '14px',
},
},
},
'parent-2': {
id: 'parent-1',
name: 'div',
props: {
style: {
fontSize: '14px',
},
},
},
'child-1-1': {
id: 'child-1-1',
name: 'div',
props: {
style: {
padding: 10,
backgroundColor: 'red',
},
},
},
'child-1-2': {
id: 'child-1-2',
name: 'div',
},
'child-2-1': {
id: 'child-1-2',
name: 'div',
},
'child-2-2': {
id: 'child-1-2',
name: 'div',
},
},
relationMap: {
'parent-1': {
children: ['child-1-1', 'child-1-2'],
},
'parent-2': {
children: ['child-2-1', 'child-2-2'],
},
},
rootComponentIds: ['parent-1', 'parent-2'],
};
This repository is a monorepo that we manage using Lerna. That means that we actually publish several packages to npm from the same codebase, including:
Package | Docs | Description |
---|---|---|
react-mc-render |
Render the value we got. |
|
react-mc-template |
Render the value we got and modify if we want. |
|
react-mc-runner |
Render the value we got and bound the events. |
|
react-mc-dnd |
An easy way to use react-dnd. | |
react-mc-dnd-frame |
Make react-dnd work for iframe . |
|
react-mc-diagrams |
Use react-dnd to draw diagrams. | |
react-mc-workspace |
Build your own visual programming tool. |