File tree 1 file changed +24
-0
lines changed
1 file changed +24
-0
lines changed Original file line number Diff line number Diff line change 7
7
from idom import html
8
8
from idom .core .dispatcher import render_json_patch
9
9
from idom .core .hooks import COMPONENT_DID_RENDER_EFFECT , LifeCycleHook , current_hook
10
+ from idom .core .layout import Layout
10
11
from idom .testing import HookCatcher , assert_idom_logged
12
+ from idom .utils import Ref
11
13
from tests .assert_utils import assert_same_items
12
14
13
15
@@ -1139,3 +1141,25 @@ def bad_effect():
1139
1141
await layout .render ()
1140
1142
component_hook .latest .schedule_render ()
1141
1143
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