Fabric TextInput: prepareForRecycle leaves stale inputAccessoryViewButtonLabel (empty Done bar)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 76/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- objective-c, react-native
- Domain
- mobile
Research direction
Start with RCTTextInputComponentView's prepareForRecycle and trace how updateProps and setDefaultInputAccessoryView handle inputAccessoryViewButtonLabel. Reproduce on an iOS 26.5 Simulator with Fabric by recycling a text input from one with a label to an unlabelled number, decimal, or phone pad. Done when the remounted input no longer shows an empty Done toolbar; verify the alternative zero-length-label behavior if choosing that approach.
Written by the indexing model from the issue text.
Description
Description
On Fabric (RN 0.85), RCTTextInputComponentView prepareForRecycle clears inputAccessoryView, inputAccessoryViewID, and _hasInputAccessoryView, but does not clear _backedTextInputView.inputAccessoryViewButtonLabel.
When a recycled view is remounted for a number/decimal/phone pad without inputAccessoryViewButtonLabel, updateProps diffs against the stale _props and may not re-assign the label. RCTNSStringFromString("") returns @"" (non-nil). setDefaultInputAccessoryView treats any non-nil label as "has a label":
BOOL containsInputAccessoryViewButtonLabel = inputAccessoryViewButtonLabel != nil;
So an unlabelled number pad on a recycled view shows an empty Done toolbar with an invisible button (reproduced on iOS 26.5 Simulator).
Suggested fix
In prepareForRecycle, also set:
_backedTextInputView.inputAccessoryViewButtonLabel = nil;
Alternatively, treat zero-length labels as unset in setDefaultInputAccessoryView (length == 0 → no accessory from the label path).
Environment
- react-native 0.85.x / Fabric
- iOS 26.5 Simulator
- Dominant language
- C++
- Stars
- 127k
- Forks
- 25.3k
- PR merge metrics
- No merged PRs in 30d
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from react/react-native
-
Needs: Attention Needs: Repro
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
react/react-native#58904 · 2 comments ·
Maintainers usually reply within 1 day
-
Needs: Author Feedback Needs: Repro
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
react/react-native#58659 · 2 comments ·
Maintainers usually reply within 1 day
-
Needs: Author Feedback Needs: Repro
Difficulty 1/5 Under an hour Newbie friendliness 92/100
react/react-native#58621 · 1 comment ·
Maintainers usually reply within 1 day
-
Add TypeScript declaration for the performance globalPossibly taken @Cedric921 claimed this 5 days ago. OpenNeeds: Attention Needs: Repro
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
react/react-native#58610 · 4 comments ·
Maintainers usually reply within 1 day
-
Needs: Triage :mag:
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
react/react-native#58565 · 2 comments · 2 reactions ·
Maintainers usually reply within 1 day
All issues in react/react-native
Similar issues
-
WiFiMulti::addAP rejects valid 32-byte SSIDsPossibly taken A pull request linked to this issue is open or already merged. OpenStatus: Awaiting triage
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
espressif/arduino-esp32#12984 ·
Maintainers usually reply within 1 day
-
torch_ops/logprob.cu does not compile with the serving container's nvcc (13.3.73); check_torch_ops.py cannot run as shippedPossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 2/5 Under an hour Newbie friendliness 72/100
ashhart/TensorFold#535 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 Under an hour Newbie friendliness 78/100
sudoevolve/EUI-NEO#95 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day