diff --git a/reflex/state.py b/reflex/state.py index 127fe98cc..55f29cf45 100644 --- a/reflex/state.py +++ b/reflex/state.py @@ -1959,6 +1959,9 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): if var in self.base_vars or var in self._backend_vars: self._was_touched = True break + if var == constants.ROUTER_DATA and self.parent_state is None: + self._was_touched = True + break def _get_was_touched(self) -> bool: """Check current dirty_vars and flag to determine if state instance was modified. diff --git a/tests/units/test_app.py b/tests/units/test_app.py index 86bb1b465..216d36f62 100644 --- a/tests/units/test_app.py +++ b/tests/units/test_app.py @@ -1007,9 +1007,9 @@ async def test_dynamic_route_var_route_change_completed_on_load( substate_token = _substate_key(token, DynamicState) sid = "mock_sid" client_ip = "127.0.0.1" - state = await app.state_manager.get_state(substate_token) - state.router_data = {"simulate": "hydrated"} - assert state.dynamic == "" + async with app.state_manager.modify_state(substate_token) as state: + state.router_data = {"simulate": "hydrated"} + assert state.dynamic == "" exp_vals = ["foo", "foobar", "baz"] def _event(name, val, **kwargs): @@ -1181,8 +1181,6 @@ async def test_process_events(mocker, token: str): "ip": "127.0.0.1", } app = App(state=GenState) - state = await app.state_manager.get_state(_substate_key(token, GenState)) - state.router_data = {"simulate": "hydrated"} mocker.patch.object(app, "_postprocess", AsyncMock()) event = Event( @@ -1191,6 +1189,8 @@ async def test_process_events(mocker, token: str): payload={"c": 5}, router_data=router_data, ) + async with app.state_manager.modify_state(event.substate_token) as state: + state.router_data = {"simulate": "hydrated"} async for _update in process(app, event, "mock_sid", {}, "127.0.0.1"): pass diff --git a/tests/units/test_state.py b/tests/units/test_state.py index 4d37c2e3e..8e61b8dae 100644 --- a/tests/units/test_state.py +++ b/tests/units/test_state.py @@ -2815,8 +2815,8 @@ async def test_preprocess(app_module_mock, token, test_state, expected, mocker): app = app_module_mock.app = App( state=State, load_events={"index": [test_state.test_handler]} ) - state = await app.state_manager.get_state(_substate_key(token, State)) - state.router_data = {"simulate": "hydrate"} + async with app.state_manager.modify_state(_substate_key(token, State)) as state: + state.router_data = {"simulate": "hydrate"} updates = [] async for update in rx.app.process( @@ -2863,8 +2863,8 @@ async def test_preprocess_multiple_load_events(app_module_mock, token, mocker): state=State, load_events={"index": [OnLoadState.test_handler, OnLoadState.test_handler]}, ) - state = await app.state_manager.get_state(_substate_key(token, State)) - state.router_data = {"simulate": "hydrate"} + async with app.state_manager.modify_state(_substate_key(token, State)) as state: + state.router_data = {"simulate": "hydrate"} updates = [] async for update in rx.app.process(