Skip to content

fix: stale VoiceOver value from async UI updates to Text - #58169

Closed
coolsoftwaretyler wants to merge 1 commit into
react:mainfrom
coolsoftwaretyler:fix/58145
Closed

coolsoftwaretyler wants to merge 1 commit into
react:mainfrom
coolsoftwaretyler:fix/58145

Conversation

@coolsoftwaretyler

Copy link
Copy Markdown
Contributor

Summary:

This is a targeted fix for #58145, where I observed iOS VoiceOver reading stale values over Text elements that were updated asynchronously (from a setTimeout call).

This patch definitely fixes the issue, but I'm happy to iterate on the design if there are any considerations I haven't taken into account: coolsoftwaretyler/focusissues#1

Maybe related to #49462? Although what I found is that when VoiceOver encountered a failure, it bounced back to the status bar, so it's possible 49462 is some other issue with modals that presents the same failure mode.

Changelog:

Pick one each for the category and type tags:

[IOS] [FIXED] -VoiceOver text readout when changing elements asynchronously

Test Plan:

I built a reproducer and tested this patch with it. To test:

  1. Build reproducer (or any app that changes text asynchronously)
  2. Install app to physical device (I found the accessibility inspector tool with simulators would paper over the issue, so you need to actually use VoiceOver on a device)
  3. Turn on voiceover
  4. Navigate through the interface, moving focus through your elements to ensure they work as expected
  5. Then use VoiceOver to trigger an async update to some text
  6. Move on to any value that was changed by the async update
  7. Text will probably be stale, and moving focus no longer works

Before

641000653-9506a48b-7ac4-4728-8908-1148aeb7ad07.mp4

After

ScreenRecording_08-27-2026.10-36-35_1.MP4

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 27, 2026
@facebook-github-tools facebook-github-tools Bot added the Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. label Aug 27, 2026
@meta-codesync

meta-codesync Bot commented Aug 28, 2026

Copy link
Copy Markdown

@christophpurrer has imported this pull request. If you are a Meta employee, you can view this in D117875865.

@cortinico cortinico left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

@meta-codesync meta-codesync Bot closed this in 082d787 Sep 1, 2026
@meta-codesync meta-codesync Bot added the Merged This PR has been merged. label Sep 1, 2026
@meta-codesync

meta-codesync Bot commented Sep 1, 2026

Copy link
Copy Markdown

@christophpurrer merged this pull request in 082d787.

shashikant-panchal pushed a commit to shashikant-panchal/react-native that referenced this pull request Sep 10, 2026
Summary:
This is a targeted fix for react#58145, where I observed iOS VoiceOver reading stale values over `Text` elements that were updated asynchronously (from a `setTimeout` call).

This patch definitely fixes the issue, but I'm happy to iterate on the design if there are any considerations I haven't taken into account: coolsoftwaretyler/focusissues#1

Maybe related to react#49462? Although what I found is that when VoiceOver encountered a failure, it bounced back to the status bar, so it's possible 49462 is some *other* issue with modals that presents the same failure mode.

## Changelog:

Pick one each for the category and type tags:

[IOS] [FIXED] -VoiceOver text readout when changing elements asynchronously

Pull Request resolved: react#58169

Test Plan:
I built a reproducer and tested this patch with it. To test:

1. Build reproducer (or any app that changes text asynchronously)
2. Install app to physical device (I found the accessibility inspector tool with simulators would paper over the issue, so you need to actually use VoiceOver on a device)
3. Turn on voiceover
4. Navigate through the interface, moving focus through your elements to ensure they work as expected
5. Then use VoiceOver to trigger an async update to some text
6. Move on to any value that was changed by the async update
7. Text will probably be stale, and moving focus no longer works

### Before

https://github.com/user-attachments/assets/05b8d308-e743-4cff-917c-c5410307937d

### After

https://github.com/user-attachments/assets/d7d8d3fc-5bd8-45b9-bab0-de9bbc9cbcda

Reviewed By: cortinico

Differential Revision: D117875865

Pulled By: christophpurrer

fbshipit-source-id: 218ca244ea99e460d687ec527d6fbcaa9e499943
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Merged This PR has been merged. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants