Skip to content

Conversation

@protikbiswas100
Copy link
Contributor

@protikbiswas100 protikbiswas100 commented Oct 23, 2025

Description

TextInput regression between Paper and Fabric: Manual set value clearTextOnSubmit-style behavior not working

Type of Change

  • Bug fix (non-breaking change which fixes an issue)

Why

TextInput regression between Paper and Fabric: Manual set value clearTextOnSubmit-style behavior not working

Resolves [https://github.com//issues/15168]

What

What changes were made to the codebase to solve the bug, add the functionality, etc. that you specified above.
Modified to if (eventCount >= m_nativeEventCount - 1) to allow immediate JS side changes.
Added State Synchronization for Clear Text to ensure the React state stays in sync with the native TextInput when text is cleared.

Screenshots

Before

15168-before.mp4

After

15168-after.mp4

Testing

yarn build passed successfully, added a sample textInput field in RNTester-Fabric app to repro the issue.

Ran E2ETestAppFabric Unit Test
build

Changelog

Should this change be included in the release notes: yes

Add a brief summary of the change to use in the release notes for the next release.

Microsoft Reviewers: Open in CodeFlow
Microsoft Reviewers: Open in CodeFlow

@protikbiswas100 protikbiswas100 requested a review from a team as a code owner October 23, 2025 05:25
@protikbiswas100
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 2 pipeline(s).

@protikbiswas100
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 2 pipeline(s).

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes a regression in TextInput behavior between Paper and Fabric architectures where manual value clearing on submit (clearTextOnSubmit-style behavior) was not working correctly. The issue occurred when JavaScript immediately updated the text value during onSubmitEditing, causing synchronization problems between native and JS state.

Key Changes:

  • Modified event count validation to accept immediate JS updates by changing the condition from eventCount >= m_nativeEventCount to eventCount >= m_nativeEventCount - 1
  • Added state synchronization when clearing text to ensure React state stays consistent with native TextInput state

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
vnext/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp Modified event count check and added state update logic when clearing text on submit
change/react-native-windows-daac39ef-4292-4f66-81ae-708b1c0f6676.json Added change file for versioning

@anupriya13
Copy link
Contributor

anupriya13 commented Oct 23, 2025

In the video when you pressed enter in last text input why did it have the value "backslash" instead of empty?

@protikbiswas100
Copy link
Contributor Author

In the video when you pressed enter in last text input why did it have the value "backslash" instead of empty?

I pressed back slash key by mistake after pressing enter from my keyboard

// Allow text updates that are very close to the current native event count
// This handles the case where JavaScript immediately calls setValue during onSubmitEditing
// In that case, eventCount might be one less than m_nativeEventCount due to timing
if (eventCount >= m_nativeEventCount - 1) {
Copy link
Contributor

@anupriya13 anupriya13 Oct 23, 2025

Choose a reason for hiding this comment

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

I am not able to understand on how this is related to pressing enter for clearOnSubmit? What about all existing worflows for events?

Copy link
Contributor

@anupriya13 anupriya13 Oct 23, 2025

Choose a reason for hiding this comment

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

Can you try removing this change and check if your code is working fine for clearOnSubmit?

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, this seems like it would cause us to get into all kinds of bad states, if we start listening to JS commands when native is an event behind.

@protikbiswas100
Copy link
Contributor Author

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 2 pipeline(s).

@anupriya13
Copy link
Contributor

In the video when you pressed enter in last text input why did it have the value "backslash" instead of empty?

I pressed back slash key by mistake after pressing enter from my keyboard

Okay can you please re-record and attach correct before and after videos?

@anupriya13
Copy link
Contributor

anupriya13 commented Oct 23, 2025

Description Summary missing in the end.
"Add a brief summary of the change to use in the release notes for the next release."

@anupriya13
Copy link
Contributor

E2ETestAppFabric Unit Test verification?

m_textServices->TxSetText(L"");
// Also update the state to reflect the cleared text
// This ensures consistency between native and JS state
auto data = m_state->getData();
Copy link
Contributor

Choose a reason for hiding this comment

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

This should already happen through WindowsTextInputComponentView::OnTextUpdated. -- Why are we not hitting that case?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

You're right that TxSetText(L"") should normally trigger [EN_CHANGE] → OnTextUpdated(). However, there are several timing and context issues that make the manual state update necessary. One reason why we are not hitting the case I believe is that OnTextUpdated() method has a condition if (m_eventEmitter && !m_comingFromJS) that prevents event emission when m_comingFromJS is true. While we're not setting m_comingFromJS = true here, there might be other state flags or timing issues that could suppress the automatic notification.

@protikbiswas100
Copy link
Contributor Author

In the video when you pressed enter in last text input why did it have the value "backslash" instead of empty?

I pressed back slash key by mistake after pressing enter from my keyboard

Okay can you please re-record and attach correct before and after videos?

reuploaded before and after videos

@protikbiswas100
Copy link
Contributor Author

E2ETestAppFabric Unit Test verification

Added in next commit

@protikbiswas100
Copy link
Contributor Author

Description Summary missing in the end. "Add a brief summary of the change to use in the release notes for the next release."

It's already there in description

@protikbiswas100
Copy link
Contributor Author

clearTextONsubmit.mp4

Current behavior with ClearTextOnSubmit with mainline changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants