File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77from idom import html
88from idom .core .dispatcher import render_json_patch
99from idom .core .hooks import COMPONENT_DID_RENDER_EFFECT , LifeCycleHook , current_hook
10+ from idom .core .layout import Layout
1011from idom .testing import HookCatcher , assert_idom_logged
12+ from idom .utils import Ref
1113from tests .assert_utils import assert_same_items
1214
1315
@@ -1139,3 +1141,25 @@ def bad_effect():
11391141 await layout .render ()
11401142 component_hook .latest .schedule_render ()
11411143 await layout .render () # no error
1144+
1145+
1146+ async def test_set_state_during_render ():
1147+ render_count = Ref (0 )
1148+
1149+ @idom .component
1150+ def SetStateDuringRender ():
1151+ render_count .current += 1
1152+ state , set_state = idom .use_state (0 )
1153+ if not state :
1154+ set_state (state + 1 )
1155+ return html .div (state )
1156+
1157+ with Layout (SetStateDuringRender ()) as layout :
1158+ await layout .render ()
1159+ assert render_count .current == 1
1160+ await layout .render ()
1161+ assert render_count .current == 2
1162+
1163+ # there should be no more renders to perform
1164+ with pytest .raises (asyncio .exceptions .TimeoutError ):
1165+ await asyncio .wait_for (layout .render (), timeout = 0.1 )
You can’t perform that action at this time.
0 commit comments