diff --git a/.all-contributorsrc b/.all-contributorsrc index 821ffece..42bb9709 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -519,6 +519,16 @@ "contributions": [ "maintenance" ] + }, + { + "login": "xobotyi", + "name": "Anton Zinovyev", + "avatar_url": "https://avatars.githubusercontent.com/u/6178739?v=4", + "profile": "https://github.com/xobotyi", + "contributions": [ + "bug", + "code" + ] } ], "skipCi": true, diff --git a/README.md b/README.md index 411ca55a..a976ce7b 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Aleksandar Grbic

๐Ÿ“–
Jonathan Holmes

๐Ÿ’ป
Michaรซl De Boey

๐Ÿšง +
Anton Zinovyev

๐Ÿ› ๐Ÿ’ป diff --git a/src/server/pure.ts b/src/server/pure.ts index 1bacd008..b37b6df5 100644 --- a/src/server/pure.ts +++ b/src/server/pure.ts @@ -2,7 +2,7 @@ import ReactDOMServer from 'react-dom/server' import ReactDOM from 'react-dom' import { act } from 'react-dom/test-utils' -import { RendererProps, RendererOptions } from '../types/react' +import { RendererOptions, RendererProps } from '../types/react' import { createRenderHook } from '../core' import { createTestHarness } from '../helpers/createTestHarness' @@ -12,8 +12,8 @@ function createServerRenderer( { wrapper }: RendererOptions ) { let renderProps: TProps | undefined - let hydrated = false - const container = document.createElement('div') + let container: HTMLDivElement | undefined + let serverOutput: string = '' const testHarness = createTestHarness(rendererProps, wrapper, false) return { @@ -21,35 +21,35 @@ function createServerRenderer( renderProps = props act(() => { try { - const serverOutput = ReactDOMServer.renderToString(testHarness(props)) - container.innerHTML = serverOutput + serverOutput = ReactDOMServer.renderToString(testHarness(props)) } catch (e: unknown) { rendererProps.setError(e as Error) } }) }, hydrate() { - if (hydrated) { + if (container) { throw new Error('The component can only be hydrated once') } else { + container = document.createElement('div') + container.innerHTML = serverOutput act(() => { - ReactDOM.hydrate(testHarness(renderProps), container) + ReactDOM.hydrate(testHarness(renderProps), container!) }) - hydrated = true } }, rerender(props?: TProps) { - if (!hydrated) { + if (!container) { throw new Error('You must hydrate the component before you can rerender') } act(() => { - ReactDOM.render(testHarness(props), container) + ReactDOM.render(testHarness(props), container!) }) }, unmount() { - if (hydrated) { + if (container) { act(() => { - ReactDOM.unmountComponentAtNode(container) + ReactDOM.unmountComponentAtNode(container!) }) } },