diff --git a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js
index caecb4ffc4b4c..d89f40037ef2f 100644
--- a/packages/react-dom-bindings/src/client/DOMPropertyOperations.js
+++ b/packages/react-dom-bindings/src/client/DOMPropertyOperations.js
@@ -253,10 +253,6 @@ export function getValueForAttributeOnCustomComponent(
}
return expected === undefined ? undefined : null;
}
- if (enableCustomElementPropertySupport && name === 'className') {
- // className is a special cased property on the server to render as an attribute.
- name = 'class';
- }
const value = node.getAttribute(name);
if (enableCustomElementPropertySupport) {
diff --git a/packages/react-dom-bindings/src/client/ReactDOMComponent.js b/packages/react-dom-bindings/src/client/ReactDOMComponent.js
index ffb104ee33e91..e587d84707189 100644
--- a/packages/react-dom-bindings/src/client/ReactDOMComponent.js
+++ b/packages/react-dom-bindings/src/client/ReactDOMComponent.js
@@ -1064,6 +1064,21 @@ function diffHydratedCustomComponent(
continue;
}
// eslint-disable-next-line no-fallthrough
+ case 'className':
+ if (enableCustomElementPropertySupport) {
+ // className is a special cased property on the server to render as an attribute.
+ extraAttributeNames.delete('class');
+ const serverValue = getValueForAttributeOnCustomComponent(
+ domElement,
+ 'class',
+ nextProp,
+ );
+ if (nextProp !== serverValue) {
+ warnForPropDifference('className', serverValue, nextProp);
+ }
+ continue;
+ }
+ // eslint-disable-next-line no-fallthrough
default: {
let ownNamespaceDev = parentNamespaceDev;
if (ownNamespaceDev === HTML_NAMESPACE) {
diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationAttributes-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationAttributes-test.js
index c20988e2b3682..31e4e94ac8c4a 100644
--- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationAttributes-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationAttributes-test.js
@@ -34,7 +34,7 @@ function initModules() {
};
}
-const {resetModules, itRenders, clientCleanRender, clientRenderOnServerString} =
+const {resetModules, itRenders, clientCleanRender} =
ReactDOMServerIntegrationUtils(initModules);
describe('ReactDOMServerIntegration', () => {
@@ -662,16 +662,13 @@ describe('ReactDOMServerIntegration', () => {
});
itRenders('className for custom elements', async render => {
+ const e = await render(, 0);
if (ReactFeatureFlags.enableCustomElementPropertySupport) {
- const e = await render(
- ,
- render === clientRenderOnServerString ? 1 : 0,
- );
expect(e.getAttribute('className')).toBe(null);
expect(e.getAttribute('class')).toBe('test');
} else {
- const e = await render(, 0);
expect(e.getAttribute('className')).toBe('test');
+ expect(e.getAttribute('class')).toBe(null);
}
});