React package providing legacy DOM factory methods for programmatic HTML and SVG element creation.
—
React DOM Factories is a legacy React add-on that provides pre-configured DOM factory methods for creating HTML and SVG elements programmatically. Originally part of React core before version 16.0.0, these factories were extracted into a separate package to maintain backward compatibility for applications that relied on the factory pattern instead of JSX.
npm install react-dom-factories// Import the entire DOM factories object
const DOM = require('react-dom-factories');
// Import specific factories
const { div, p, span, button } = require('react-dom-factories');ES Modules (if bundler supports):
import DOM from 'react-dom-factories';
import { div, p, span, button } from 'react-dom-factories';Browser global (requires React to be loaded globally first):
// React must be available as window.React before loading this module
const DOM = window.ReactDOMFactories;
const { div, p } = DOM;const React = require('react');
const ReactDOM = require('react-dom');
const { div, p, span, button } = require('react-dom-factories');
// Create elements using factory functions
const greeting = div(
{ className: 'greeting' },
p(null, 'Hello, '),
span({ style: { fontWeight: 'bold' } }, 'World!'),
button({ onClick: () => alert('Clicked!') }, 'Click me')
);
// Render to DOM
ReactDOM.render(greeting, document.getElementById('app'));React DOM Factories is built around a simple factory pattern:
React.createElement(type, props, ...children)type property containing the element tag namePre-configured factory functions for all standard HTML elements. Each factory creates React elements of the specified type.
// Factory function signature (applies to all HTML elements)
type ElementFactory = (props?: object, ...children: ReactNode[]) => ReactElement;
// HTML Element Factories
const a: ElementFactory; // <a> elements
const abbr: ElementFactory; // <abbr> elements
const address: ElementFactory; // <address> elements
const area: ElementFactory; // <area> elements
const article: ElementFactory; // <article> elements
const aside: ElementFactory; // <aside> elements
const audio: ElementFactory; // <audio> elements
const b: ElementFactory; // <b> elements
const base: ElementFactory; // <base> elements
const bdi: ElementFactory; // <bdi> elements
const bdo: ElementFactory; // <bdo> elements
const big: ElementFactory; // <big> elements
const blockquote: ElementFactory; // <blockquote> elements
const body: ElementFactory; // <body> elements
const br: ElementFactory; // <br> elements
const button: ElementFactory; // <button> elements
const canvas: ElementFactory; // <canvas> elements
const caption: ElementFactory; // <caption> elements
const cite: ElementFactory; // <cite> elements
const code: ElementFactory; // <code> elements
const col: ElementFactory; // <col> elements
const colgroup: ElementFactory; // <colgroup> elements
const data: ElementFactory; // <data> elements
const datalist: ElementFactory; // <datalist> elements
const dd: ElementFactory; // <dd> elements
const del: ElementFactory; // <del> elements
const details: ElementFactory; // <details> elements
const dfn: ElementFactory; // <dfn> elements
const dialog: ElementFactory; // <dialog> elements
const div: ElementFactory; // <div> elements
const dl: ElementFactory; // <dl> elements
const dt: ElementFactory; // <dt> elements
const em: ElementFactory; // <em> elements
const embed: ElementFactory; // <embed> elements
const fieldset: ElementFactory; // <fieldset> elements
const figcaption: ElementFactory; // <figcaption> elements
const figure: ElementFactory; // <figure> elements
const footer: ElementFactory; // <footer> elements
const form: ElementFactory; // <form> elements
const h1: ElementFactory; // <h1> elements
const h2: ElementFactory; // <h2> elements
const h3: ElementFactory; // <h3> elements
const h4: ElementFactory; // <h4> elements
const h5: ElementFactory; // <h5> elements
const h6: ElementFactory; // <h6> elements
const head: ElementFactory; // <head> elements
const header: ElementFactory; // <header> elements
const hgroup: ElementFactory; // <hgroup> elements
const hr: ElementFactory; // <hr> elements
const html: ElementFactory; // <html> elements
const i: ElementFactory; // <i> elements
const iframe: ElementFactory; // <iframe> elements
const img: ElementFactory; // <img> elements
const input: ElementFactory; // <input> elements
const ins: ElementFactory; // <ins> elements
const kbd: ElementFactory; // <kbd> elements
const keygen: ElementFactory; // <keygen> elements
const label: ElementFactory; // <label> elements
const legend: ElementFactory; // <legend> elements
const li: ElementFactory; // <li> elements
const link: ElementFactory; // <link> elements
const main: ElementFactory; // <main> elements
const map: ElementFactory; // <map> elements
const mark: ElementFactory; // <mark> elements
const menu: ElementFactory; // <menu> elements
const menuitem: ElementFactory; // <menuitem> elements
const meta: ElementFactory; // <meta> elements
const meter: ElementFactory; // <meter> elements
const nav: ElementFactory; // <nav> elements
const noscript: ElementFactory; // <noscript> elements
const object: ElementFactory; // <object> elements
const ol: ElementFactory; // <ol> elements
const optgroup: ElementFactory; // <optgroup> elements
const option: ElementFactory; // <option> elements
const output: ElementFactory; // <output> elements
const p: ElementFactory; // <p> elements
const param: ElementFactory; // <param> elements
const picture: ElementFactory; // <picture> elements
const pre: ElementFactory; // <pre> elements
const progress: ElementFactory; // <progress> elements
const q: ElementFactory; // <q> elements
const rp: ElementFactory; // <rp> elements
const rt: ElementFactory; // <rt> elements
const ruby: ElementFactory; // <ruby> elements
const s: ElementFactory; // <s> elements
const samp: ElementFactory; // <samp> elements
const script: ElementFactory; // <script> elements
const section: ElementFactory; // <section> elements
const select: ElementFactory; // <select> elements
const small: ElementFactory; // <small> elements
const source: ElementFactory; // <source> elements
const span: ElementFactory; // <span> elements
const strong: ElementFactory; // <strong> elements
const style: ElementFactory; // <style> elements
const sub: ElementFactory; // <sub> elements
const summary: ElementFactory; // <summary> elements
const sup: ElementFactory; // <sup> elements
const table: ElementFactory; // <table> elements
const tbody: ElementFactory; // <tbody> elements
const td: ElementFactory; // <td> elements
const textarea: ElementFactory; // <textarea> elements
const tfoot: ElementFactory; // <tfoot> elements
const th: ElementFactory; // <th> elements
const thead: ElementFactory; // <thead> elements
const time: ElementFactory; // <time> elements
const title: ElementFactory; // <title> elements
const tr: ElementFactory; // <tr> elements
const track: ElementFactory; // <track> elements
const u: ElementFactory; // <u> elements
const ul: ElementFactory; // <ul> elements
const var: ElementFactory; // <var> elements
const video: ElementFactory; // <video> elements
const wbr: ElementFactory; // <wbr> elementsUsage Examples:
const { div, p, span, button, input, form, h1 } = require('react-dom-factories');
// Simple elements
const title = h1(null, 'Welcome');
const paragraph = p({ className: 'intro' }, 'This is a paragraph');
// Elements with attributes
const image = img({
src: 'logo.png',
alt: 'Company Logo',
width: 100,
height: 50
});
// Nested elements
const card = div(
{ className: 'card' },
h1(null, 'Card Title'),
p(null, 'Card description'),
button({ onClick: handleClick }, 'Action')
);
// Form elements
const loginForm = form(
{ onSubmit: handleSubmit },
input({ type: 'text', placeholder: 'Username', name: 'username' }),
input({ type: 'password', placeholder: 'Password', name: 'password' }),
button({ type: 'submit' }, 'Login')
);Pre-configured factory functions for common SVG elements. Each factory creates React SVG elements of the specified type.
// SVG Element Factories
const circle: ElementFactory; // <circle> elements
const clipPath: ElementFactory; // <clipPath> elements
const defs: ElementFactory; // <defs> elements
const ellipse: ElementFactory; // <ellipse> elements
const g: ElementFactory; // <g> elements
const image: ElementFactory; // <image> elements (SVG)
const line: ElementFactory; // <line> elements
const linearGradient: ElementFactory; // <linearGradient> elements
const mask: ElementFactory; // <mask> elements
const path: ElementFactory; // <path> elements
const pattern: ElementFactory; // <pattern> elements
const polygon: ElementFactory; // <polygon> elements
const polyline: ElementFactory; // <polyline> elements
const radialGradient: ElementFactory; // <radialGradient> elements
const rect: ElementFactory; // <rect> elements
const stop: ElementFactory; // <stop> elements
const svg: ElementFactory; // <svg> elements
const text: ElementFactory; // <text> elements (SVG)
const tspan: ElementFactory; // <tspan> elementsUsage Examples:
const { svg, circle, rect, path, text } = require('react-dom-factories');
// Simple SVG shapes
const simpleCircle = svg(
{ width: 100, height: 100, viewBox: '0 0 100 100' },
circle({ cx: 50, cy: 50, r: 40, fill: 'blue' })
);
// Complex SVG graphic
const logo = svg(
{ width: 200, height: 100, viewBox: '0 0 200 100' },
rect({ x: 10, y: 10, width: 80, height: 80, fill: 'red' }),
circle({ cx: 150, cy: 50, r: 30, fill: 'green' }),
text({ x: 100, y: 95, textAnchor: 'middle' }, 'Logo')
);
// Path-based graphics
const arrow = svg(
{ width: 50, height: 50, viewBox: '0 0 50 50' },
path({
d: 'M10,25 L35,10 L35,20 L45,20 L45,30 L35,30 L35,40 Z',
fill: 'black'
})
);// React types (from React library)
type ReactNode = string | number | ReactElement | ReactNode[];
type ReactElement = {
type: string;
props: object;
key: string | number | null;
};
// Factory function type
type ElementFactory = {
(props?: object, ...children: ReactNode[]): ReactElement;
type: string; // The HTML/SVG tag name
};
// Main export object
type ReactDOMFactories = {
// HTML elements
a: ElementFactory;
abbr: ElementFactory;
address: ElementFactory;
area: ElementFactory;
article: ElementFactory;
aside: ElementFactory;
audio: ElementFactory;
b: ElementFactory;
base: ElementFactory;
bdi: ElementFactory;
bdo: ElementFactory;
big: ElementFactory;
blockquote: ElementFactory;
body: ElementFactory;
br: ElementFactory;
button: ElementFactory;
canvas: ElementFactory;
caption: ElementFactory;
cite: ElementFactory;
code: ElementFactory;
col: ElementFactory;
colgroup: ElementFactory;
data: ElementFactory;
datalist: ElementFactory;
dd: ElementFactory;
del: ElementFactory;
details: ElementFactory;
dfn: ElementFactory;
dialog: ElementFactory;
div: ElementFactory;
dl: ElementFactory;
dt: ElementFactory;
em: ElementFactory;
embed: ElementFactory;
fieldset: ElementFactory;
figcaption: ElementFactory;
figure: ElementFactory;
footer: ElementFactory;
form: ElementFactory;
h1: ElementFactory;
h2: ElementFactory;
h3: ElementFactory;
h4: ElementFactory;
h5: ElementFactory;
h6: ElementFactory;
head: ElementFactory;
header: ElementFactory;
hgroup: ElementFactory;
hr: ElementFactory;
html: ElementFactory;
i: ElementFactory;
iframe: ElementFactory;
img: ElementFactory;
input: ElementFactory;
ins: ElementFactory;
kbd: ElementFactory;
keygen: ElementFactory;
label: ElementFactory;
legend: ElementFactory;
li: ElementFactory;
link: ElementFactory;
main: ElementFactory;
map: ElementFactory;
mark: ElementFactory;
menu: ElementFactory;
menuitem: ElementFactory;
meta: ElementFactory;
meter: ElementFactory;
nav: ElementFactory;
noscript: ElementFactory;
object: ElementFactory;
ol: ElementFactory;
optgroup: ElementFactory;
option: ElementFactory;
output: ElementFactory;
p: ElementFactory;
param: ElementFactory;
picture: ElementFactory;
pre: ElementFactory;
progress: ElementFactory;
q: ElementFactory;
rp: ElementFactory;
rt: ElementFactory;
ruby: ElementFactory;
s: ElementFactory;
samp: ElementFactory;
script: ElementFactory;
section: ElementFactory;
select: ElementFactory;
small: ElementFactory;
source: ElementFactory;
span: ElementFactory;
strong: ElementFactory;
style: ElementFactory;
sub: ElementFactory;
summary: ElementFactory;
sup: ElementFactory;
table: ElementFactory;
tbody: ElementFactory;
td: ElementFactory;
textarea: ElementFactory;
tfoot: ElementFactory;
th: ElementFactory;
thead: ElementFactory;
time: ElementFactory;
title: ElementFactory;
tr: ElementFactory;
track: ElementFactory;
u: ElementFactory;
ul: ElementFactory;
var: ElementFactory;
video: ElementFactory;
wbr: ElementFactory;
// SVG elements
circle: ElementFactory;
clipPath: ElementFactory;
defs: ElementFactory;
ellipse: ElementFactory;
g: ElementFactory;
image: ElementFactory;
line: ElementFactory;
linearGradient: ElementFactory;
mask: ElementFactory;
path: ElementFactory;
pattern: ElementFactory;
polygon: ElementFactory;
polyline: ElementFactory;
radialGradient: ElementFactory;
rect: ElementFactory;
stop: ElementFactory;
svg: ElementFactory;
text: ElementFactory;
tspan: ElementFactory;
};⚠️ Legacy Package: This package is considered legacy as of React 16.0.0. The React team recommends using modern alternatives:
React.createFactory(type) for programmatic element creationReact.createElement(type, props, ...children) directlyThis package should only be used for maintaining backward compatibility in existing applications that relied on the DOM factory pattern.
Install with Tessl CLI
npx tessl i tessl/npm-react-dom-factories