Skip to content

Commit fa78795

Browse files
justin808claude
andcommitted
[React 19] Update OSS package imports for consistency with Pro
This PR updates the open-source package to use the same import pattern as the Pro package, ensuring consistency across the codebase. ## Changes Changed from namespace imports to named imports in 3 OSS files: **Before (inconsistent with Pro):** ```typescript import * as React from 'react'; React.createElement() React.isValidElement() ``` **After (consistent with Pro):** ```typescript import { createElement, isValidElement } from 'react'; createElement() isValidElement() ``` ### Files Updated 1. `packages/react-on-rails/src/createReactOutput.ts` - `React.createElement` → `createElement` - `React.isValidElement` → `isValidElement` - `React.ReactElement` type → `ReactElement` type 2. `packages/react-on-rails/src/handleError.ts` - `React.createElement` → `createElement` 3. `packages/react-on-rails/src/serverRenderReactComponent.ts` - `React.isValidElement` → `isValidElement` - Consolidated duplicate ReactElement import ## Why This Matters **Consistency:** Pro package (PR #1943) uses named imports. This brings OSS in line. **React 19 Best Practice:** Named imports are the recommended pattern for React 19: - Better tree-shaking - Clearer dependencies - More explicit code **No Breaking Changes:** Both patterns work with React 18 and 19. ## Testing ✅ Builds successfully ✅ All existing tests pass ✅ No API changes ✅ Runtime behavior unchanged ## Dependencies - Independent of PR #1942 and #1943 - Can merge in any order - Purely a code style/consistency improvement ## Impact - ✅ Improves codebase consistency - ✅ Follows React 19 best practices - ✅ No breaking changes - ✅ Works with React 18 and 19 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 23be9a9 commit fa78795

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

packages/react-on-rails/src/createReactOutput.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import * as React from 'react';
1+
import { createElement, isValidElement, type ReactElement } from 'react';
22
import type { CreateParams, ReactComponent, RenderFunction, CreateReactOutputResult } from './types/index.ts';
33
import { isServerRenderHash, isPromise } from './isServerRenderResult.ts';
44

55
function createReactElementFromRenderFunctionResult(
66
renderFunctionResult: ReactComponent,
77
name: string,
88
props: Record<string, unknown> | undefined,
9-
): React.ReactElement {
10-
if (React.isValidElement(renderFunctionResult)) {
9+
): ReactElement {
10+
if (isValidElement(renderFunctionResult)) {
1111
// If already a ReactElement, then just return it.
1212
console.error(
1313
`Warning: ReactOnRails: Your registered render-function (ReactOnRails.register) for ${name}
@@ -19,7 +19,7 @@ work if you return JSX. Update by wrapping the result JSX of ${name} in a fat ar
1919
}
2020

2121
// If a component, then wrap in an element
22-
return React.createElement(renderFunctionResult, props);
22+
return createElement(renderFunctionResult, props);
2323
}
2424

2525
/**
@@ -88,5 +88,5 @@ export default function createReactOutput({
8888
return createReactElementFromRenderFunctionResult(renderFunctionResult, name, props);
8989
}
9090
// else
91-
return React.createElement(component as ReactComponent, props);
91+
return createElement(component as ReactComponent, props);
9292
}

packages/react-on-rails/src/handleError.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import * as React from 'react';
1+
import { createElement } from 'react';
22
import { renderToString } from './ReactDOMServer.cts';
33
import type { ErrorOptions } from './types/index.ts';
44
import generateRenderingErrorMessage from './generateRenderingErrorMessage.ts';
55

66
const handleError = (options: ErrorOptions): string => {
77
const msg = generateRenderingErrorMessage(options);
8-
const reactElement = React.createElement('pre', null, msg);
8+
const reactElement = createElement('pre', null, msg);
99
return renderToString(reactElement);
1010
};
1111

packages/react-on-rails/src/serverRenderReactComponent.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import * as React from 'react';
2-
import type { ReactElement } from 'react';
1+
import { isValidElement, type ReactElement } from 'react';
32

43
// ComponentRegistry is accessed via globalThis.ReactOnRails.getComponent for cross-bundle compatibility
54
import createReactOutput from './createReactOutput.ts';
@@ -69,7 +68,7 @@ function processPromise(
6968
return '{}';
7069
}
7170
return result.then((promiseResult) => {
72-
if (React.isValidElement(promiseResult)) {
71+
if (isValidElement(promiseResult)) {
7372
return processReactElement(promiseResult);
7473
}
7574
return promiseResult;

0 commit comments

Comments
 (0)