Skip to content

Commit cc431df

Browse files
committed
Add test to ensure client input value takes priority.
1 parent db914fd commit cc431df

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

tests/test_core/test_events.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,3 +708,31 @@ def on_change(event: Event):
708708
"() => document.getElementById('controlled-input')?.value === 'A'"
709709
)
710710
assert (await inp.evaluate("node => node.value")) == "A"
711+
712+
713+
async def test_controlled_input_default_debounce_prefers_latest_client_value(
714+
display: DisplayFixture,
715+
):
716+
"""Prefer the latest client value for a controlled input when using debounce, even if the server is still processing an older event."""
717+
@reactpy.component
718+
def ControlledInput():
719+
value, set_value = use_state("")
720+
721+
def on_change(event: Event):
722+
set_value(event.target.value.upper())
723+
724+
return reactpy.html.input(
725+
{
726+
"value": value,
727+
"onChange": on_change,
728+
"id": "controlled-input",
729+
}
730+
)
731+
732+
await display.show(ControlledInput)
733+
734+
inp = await display.page.wait_for_selector("#controlled-input")
735+
await inp.type("a", delay=0)
736+
737+
await asyncio.sleep(0.5)
738+
assert (await inp.evaluate("node => node.value")) == "a"

0 commit comments

Comments
 (0)