Skip to content

Commit c3e77bb

Browse files
author
David Bailey
committed
feat(dom-to-react): support Preact
1 parent b103aae commit c3e77bb

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

README.md

+12
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,18 @@ parse('<p><br id="remove"></p>', {
194194
});
195195
```
196196

197+
### library
198+
199+
The `library` option allows you to specify which component library is used to create elements (currently either React or Preact). React is used by default if this option is not specified, or if the given option is unknown.
200+
201+
Here's an example showing how to use Preact:
202+
203+
```js
204+
parse('<br>', {
205+
library: 'preact'
206+
});
207+
```
208+
197209
## FAQ
198210

199211
#### Is this library XSS safe?

lib/dom-to-react.js

+21-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1-
var React = require('react');
21
var attributesToProps = require('./attributes-to-props');
32
var utilities = require('./utilities');
43

5-
var cloneElement = React.cloneElement;
6-
var createElement = React.createElement;
7-
var isValidElement = React.isValidElement;
4+
/**
5+
* Requires the appropriate component library (React or Preact).
6+
*
7+
* @param {Object} [options] - The additional options.
8+
* @return {Object}
9+
*/
10+
function requireReact(options) {
11+
options = options || {};
12+
13+
if (options.library === 'preact') {
14+
return require('preact');
15+
}
16+
17+
return require('react');
18+
}
819

920
/**
1021
* Converts DOM nodes to React elements.
@@ -15,6 +26,12 @@ var isValidElement = React.isValidElement;
1526
* @return {ReactElement|Array}
1627
*/
1728
function domToReact(nodes, options) {
29+
var React = requireReact(options);
30+
31+
var cloneElement = React.cloneElement;
32+
var createElement = React.createElement;
33+
var isValidElement = React.isValidElement;
34+
1835
options = options || {};
1936
var result = [];
2037
var node;

0 commit comments

Comments
 (0)