Skip to content

Commit a503a07

Browse files
committed
Fix ReactDOM build errors
1 parent 23331f9 commit a503a07

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

node_package/src/ClientSideRenderer.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/* eslint-disable max-classes-per-file */
2-
/* eslint-disable react/no-deprecated,@typescript-eslint/no-deprecated -- while we need to support React 16 */
32

43
import * as ReactDOM from 'react-dom';
54
import type { ReactElement } from 'react';
@@ -8,8 +7,8 @@ import type { RailsContext, RegisteredComponent, RenderFunction, Root } from './
87
import { getRailsContext, resetRailsContext } from './context.ts';
98
import createReactOutput from './createReactOutput.ts';
109
import { isServerRenderHash } from './isServerRenderResult.ts';
11-
import reactHydrateOrRender from './reactHydrateOrRender.ts';
1210
import { supportsRootApi } from './reactApis.ts';
11+
import reactHydrateOrRender from './reactHydrateOrRender.ts';
1312
import { debugTurbolinks } from './turbolinksUtils.ts';
1413
import * as StoreRegistry from './StoreRegistry.ts';
1514
import * as ComponentRegistry from './ComponentRegistry.ts';
@@ -103,8 +102,7 @@ class ComponentRenderer {
103102
}
104103

105104
// Hydrate if available and was server rendered
106-
// @ts-expect-error potentially present if React 18 or greater
107-
const shouldHydrate = !!(ReactDOM.hydrate || ReactDOM.hydrateRoot) && !!domNode.innerHTML;
105+
const shouldHydrate = (supportsRootApi || 'hydrate' in ReactDOM) && !!domNode.innerHTML;
108106

109107
const reactElementOrRouterResult = createReactOutput({
110108
componentObj,
@@ -156,7 +154,9 @@ You should return a React.Component always for the client side entry point.`);
156154
}
157155

158156
try {
159-
ReactDOM.unmountComponentAtNode(domNode);
157+
const unmountComponentAtNode = 'unmountComponentAtNode';
158+
// eslint-disable-next-line @typescript-eslint/no-deprecated
159+
ReactDOM[unmountComponentAtNode](domNode);
160160
} catch (e: unknown) {
161161
const error = e instanceof Error ? e : new Error('Unknown error');
162162
console.info(

node_package/src/reactHydrateOrRender.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ if (supportsRootApi) {
2222
}
2323
}
2424

25-
/* eslint-disable react/no-deprecated,@typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion --
25+
/* eslint-disable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion --
2626
* while we need to support React 16
2727
*/
28+
const hydrateProp = 'hydrate';
29+
const renderProp = 'render';
30+
2831
const reactHydrate: HydrateOrRenderType = supportsRootApi
2932
? reactDomClient!.hydrateRoot
30-
: (domNode, reactElement) => ReactDOM.hydrate(reactElement, domNode);
33+
: (domNode, reactElement) => ReactDOM[hydrateProp](reactElement, domNode);
3134

3235
function reactRender(domNode: Element, reactElement: ReactElement): RenderReturnType {
3336
if (supportsRootApi) {
@@ -36,10 +39,9 @@ function reactRender(domNode: Element, reactElement: ReactElement): RenderReturn
3639
return root;
3740
}
3841

39-
// eslint-disable-next-line react/no-render-return-value
40-
return ReactDOM.render(reactElement, domNode);
42+
return ReactDOM[renderProp](reactElement, domNode);
4143
}
42-
/* eslint-enable react/no-deprecated,@typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion */
44+
/* eslint-enable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion */
4345

4446
export default function reactHydrateOrRender(
4547
domNode: Element,

0 commit comments

Comments
 (0)