From afa26bde972f1b920c8ec28a3d0767e5af24c5e5 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Thu, 3 Sep 2026 18:54:25 +0200 Subject: [PATCH 1/2] fix(text): avoid mutating accessibilityState --- packages/react-native/Libraries/Text/Text.js | 2 +- .../Libraries/Text/__tests__/Text-itest.js | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/react-native/Libraries/Text/Text.js b/packages/react-native/Libraries/Text/Text.js index 902fcaba8bdf..e2eff288300b 100644 --- a/packages/react-native/Libraries/Text/Text.js +++ b/packages/react-native/Libraries/Text/Text.js @@ -134,7 +134,7 @@ const TextImpl: component( if (_accessibilityState == null) { _accessibilityState = {disabled}; } else { - _accessibilityState.disabled = _disabled; + _accessibilityState = {..._accessibilityState, disabled: _disabled}; } } diff --git a/packages/react-native/Libraries/Text/__tests__/Text-itest.js b/packages/react-native/Libraries/Text/__tests__/Text-itest.js index 2d19756ff935..f21772f0fe93 100644 --- a/packages/react-native/Libraries/Text/__tests__/Text-itest.js +++ b/packages/react-native/Libraries/Text/__tests__/Text-itest.js @@ -592,6 +592,30 @@ describe('', () => { }); }); + describe('accessibilityState', () => { + it('does not mutate the prop when disabled overrides it', () => { + const accessibilityState = {disabled: false}; + const root = Fantom.createRoot(); + + Fantom.runTask(() => { + root.render( + + {TEST_TEXT} + , + ); + }); + + expect(accessibilityState).toEqual({disabled: false}); + expect( + root.getRenderedOutput({props: ['accessibilityState']}).toJSX(), + ).toEqual( + + {TEST_TEXT} + , + ); + }); + }); + describe('aria-hidden', () => { it('is is passed as importantForAccessibility', () => { const root = Fantom.createRoot(); From 4ce53fdf5dc120bac7be579fca471a2a151c1809 Mon Sep 17 00:00:00 2001 From: Maximilian Krause Date: Fri, 4 Sep 2026 12:47:54 +0200 Subject: [PATCH 2/2] fix(text): type accessibility state test fixture --- packages/react-native/Libraries/Text/__tests__/Text-itest.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/Text/__tests__/Text-itest.js b/packages/react-native/Libraries/Text/__tests__/Text-itest.js index f21772f0fe93..da2e71ab37e0 100644 --- a/packages/react-native/Libraries/Text/__tests__/Text-itest.js +++ b/packages/react-native/Libraries/Text/__tests__/Text-itest.js @@ -11,7 +11,7 @@ import '@react-native/fantom/src/setUpDefaultReactNativeEnvironment'; import type {HostInstance} from 'react-native'; -import type {AccessibilityProps} from 'react-native'; +import type {AccessibilityProps, AccessibilityState} from 'react-native'; import ensureInstance from '../../../src/private/__tests__/utilities/ensureInstance'; import * as Fantom from '@react-native/fantom'; @@ -594,7 +594,7 @@ describe('', () => { describe('accessibilityState', () => { it('does not mutate the prop when disabled overrides it', () => { - const accessibilityState = {disabled: false}; + const accessibilityState: AccessibilityState = {disabled: false}; const root = Fantom.createRoot(); Fantom.runTask(() => {