File tree Expand file tree Collapse file tree 6 files changed +72
-2
lines changed Expand file tree Collapse file tree 6 files changed +72
-2
lines changed Original file line number Diff line number Diff line change @@ -20,5 +20,18 @@ import { Resolver } from "react-resolver";
20
20
Resolver .render (
21
21
() => < Router ... / > ,
22
22
document .getElementById (" app" )
23
- );
23
+ );
24
24
```
25
+
26
+ If you want to take advantage of the ` hydrate() ` method available on ` ReactDOM ` [ React Dom Docs] ( 'https://reactjs.org/docs/react-dom.html#hydrate' ) , ` Resolver ` supports this with the ` hydrateRender() ` method.
27
+
28
+ Use this just like ` Resolver.render() ` ;
29
+
30
+ ``` js
31
+ import { Resolver } from " react-resolver" ;
32
+
33
+ Resolver .hydrateRender (
34
+ () => < Router ... / > ,
35
+ document .getElementById (" app" )
36
+ );
37
+ ```
Original file line number Diff line number Diff line change 16
16
"gitbook-cli" : " 2.3.0" ,
17
17
"gitbook-plugin-prism" : " ^1.1.0" ,
18
18
"gitbook-plugin-todo" : " 0.1.2" ,
19
+ "jsdom" : " ^11.11.0" ,
19
20
"mocha" : " 2.3.4" ,
20
21
"prop-types" : " ^15.5.8" ,
21
22
"react" : " ^16.0.0" ,
Original file line number Diff line number Diff line change @@ -45,13 +45,23 @@ export default class Resolver extends React.Component {
45
45
delete window [ PAYLOAD ] ;
46
46
}
47
47
48
+ static hydrateRender = function ( render , node , data = window [ PAYLOAD ] ) {
49
+ ReactDOM . hydrate ( (
50
+ < Resolver data = { data } >
51
+ { render }
52
+ </ Resolver >
53
+ ) , node ) ;
54
+
55
+ delete window [ PAYLOAD ] ;
56
+ }
57
+
48
58
static resolve = function ( render , initialData = { } ) {
49
59
const queue = [ ] ;
50
60
51
61
renderToStaticMarkup (
52
62
< Resolver data = { initialData } onResolve = { ( ( promise ) => {
53
63
queue . push ( promise ) ;
54
- return Promise . resolve ( true ) ;
64
+ return Promise . resolve ( true ) ;
55
65
} ) } >
56
66
{ render }
57
67
</ Resolver >
Original file line number Diff line number Diff line change 1
1
--compilers js:babel/register
2
+ --require ./test/setup.js
2
3
--recursive
3
4
--reporter spec
4
5
--ui bdd
Original file line number Diff line number Diff line change @@ -68,4 +68,28 @@ describe("@resolve", function() {
68
68
) ;
69
69
} ) ;
70
70
} ) ;
71
+
72
+ context ( "browser render and hydrateRender" , function ( ) {
73
+
74
+ it ( "browser render" , ( ) => {
75
+ return Resolver . render ( ( ) => ( < Test actual = "testRender" expected = "testRender" /> ) , document . getElementById ( "resolver" ) )
76
+ } )
77
+
78
+ it ( "browser hydrateRender" , ( ) => {
79
+ return Resolver . hydrateRender ( ( ) => ( < Test actual = "testHydrateRender" expected = "testHydrateRender" /> ) , document . getElementById ( "resolver" ) )
80
+ } )
81
+
82
+ it ( "browser render markup" , function ( ) {
83
+ Resolver . render ( ( ) => ( < Test actual = "testRender" expected = "testRender" /> ) , document . getElementById ( "resolver" ) ) ;
84
+ const markup = document . getElementById ( "resolver" ) . innerHTML ;
85
+ assert . equal ( markup , "<pre>testRender</pre>" ) ;
86
+ } ) ;
87
+
88
+ it ( "browser hydrateRender markup" , function ( ) {
89
+ Resolver . hydrateRender ( ( ) => ( < Test actual = "testHydrateRender" expected = "testHydrateRender" /> ) , document . getElementById ( "resolver" ) )
90
+ const markup = document . getElementById ( "resolver" ) . innerHTML ;
91
+ assert . equal ( markup , "<pre>testHydrateRender</pre>" ) ;
92
+ } ) ;
93
+
94
+ } ) ;
71
95
} ) ;
Original file line number Diff line number Diff line change
1
+ const { JSDOM } = require ( 'jsdom' ) ;
2
+
3
+ const jsdom = new JSDOM ( '<!doctype html><html><body><div id="resolver"/></body></html>' ) ;
4
+ const { window } = jsdom ;
5
+
6
+ function copyProps ( src , target ) {
7
+ const props = Object . getOwnPropertyNames ( src )
8
+ . filter ( prop => typeof target [ prop ] === 'undefined' )
9
+ . reduce ( ( result , prop ) => ( {
10
+ ...result ,
11
+ [ prop ] : Object . getOwnPropertyDescriptor ( src , prop )
12
+ } ) , { } ) ;
13
+ Object . defineProperties ( target , props ) ;
14
+ }
15
+
16
+ global . window = window ;
17
+ global . document = window . document ;
18
+ global . navigator = {
19
+ userAgent : 'node.js'
20
+ } ;
21
+ copyProps ( window , global ) ;
You can’t perform that action at this time.
0 commit comments