Skip to content

Commit 17b66df

Browse files
author
Joe
committed
refactor(server/pure): create hydrate container on client
1 parent 278101a commit 17b66df

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/server/pure.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import ReactDOMServer from 'react-dom/server'
22
import ReactDOM from 'react-dom'
33
import { act } from 'react-dom/test-utils'
44

5-
import { RendererProps, RendererOptions } from '../types/react'
5+
import { RendererOptions, RendererProps } from '../types/react'
66

77
import { createRenderHook } from '../core'
88
import { createTestHarness } from '../helpers/createTestHarness'
@@ -12,44 +12,44 @@ function createServerRenderer<TProps, TResult>(
1212
{ wrapper }: RendererOptions<TProps>
1313
) {
1414
let renderProps: TProps | undefined
15-
let hydrated = false
16-
const container = document.createElement('div')
15+
let container: HTMLDivElement | undefined
16+
let serverOutput: string = ''
1717
const testHarness = createTestHarness(rendererProps, wrapper, false)
1818

1919
return {
2020
render(props?: TProps) {
2121
renderProps = props
2222
act(() => {
2323
try {
24-
const serverOutput = ReactDOMServer.renderToString(testHarness(props))
25-
container.innerHTML = serverOutput
24+
serverOutput = ReactDOMServer.renderToString(testHarness(props))
2625
} catch (e: unknown) {
2726
rendererProps.setError(e as Error)
2827
}
2928
})
3029
},
3130
hydrate() {
32-
if (hydrated) {
31+
if (container) {
3332
throw new Error('The component can only be hydrated once')
3433
} else {
34+
container = document.createElement('div')
35+
container.innerHTML = serverOutput
3536
act(() => {
36-
ReactDOM.hydrate(testHarness(renderProps), container)
37+
ReactDOM.hydrate(testHarness(renderProps), container!)
3738
})
38-
hydrated = true
3939
}
4040
},
4141
rerender(props?: TProps) {
42-
if (!hydrated) {
42+
if (!container) {
4343
throw new Error('You must hydrate the component before you can rerender')
4444
}
4545
act(() => {
46-
ReactDOM.render(testHarness(props), container)
46+
ReactDOM.render(testHarness(props), container!)
4747
})
4848
},
4949
unmount() {
50-
if (hydrated) {
50+
if (container) {
5151
act(() => {
52-
ReactDOM.unmountComponentAtNode(container)
52+
ReactDOM.unmountComponentAtNode(container!)
5353
})
5454
}
5555
},

0 commit comments

Comments
 (0)