@@ -232,9 +232,9 @@ def App():
232232 {
233233 "id" : "the-button" ,
234234 "onClick" : """javascript: () => {
235- let parent = document.getElementById("the-parent");
236- parent.appendChild(document.createElement("div"));
237- }""" ,
235+ let parent = document.getElementById("the-parent");
236+ parent.appendChild(document.createElement("div"));
237+ }""" ,
238238 },
239239 "Click Me" ,
240240 ),
@@ -254,3 +254,49 @@ def App():
254254 generated_divs = await parent .query_selector_all ("div" )
255255
256256 assert len (generated_divs ) == 3
257+
258+
259+ async def test_javascript_event_after_state_update (display : DisplayFixture ):
260+ @reactpy .component
261+ def App ():
262+ click_count , set_click_count = reactpy .hooks .use_state (0 )
263+ return reactpy .html .div (
264+ {"id" : "the-parent" },
265+ reactpy .html .button (
266+ {
267+ "id" : "button-with-reactpy-event" ,
268+ "onClick" : lambda _ : set_click_count (click_count + 1 ),
269+ },
270+ "Click Me" ,
271+ ),
272+ reactpy .html .button (
273+ {
274+ "id" : "button-with-javascript-event" ,
275+ "onClick" : """javascript: () => {
276+ let parent = document.getElementById("the-parent");
277+ parent.appendChild(document.createElement("div"));
278+ }""" ,
279+ },
280+ "No, Click Me" ,
281+ ),
282+ * [reactpy .html .div ("Clicked" ) for _ in range (click_count )],
283+ )
284+
285+ await display .show (lambda : App ())
286+
287+ button1 = await display .page .wait_for_selector (
288+ "#button-with-reactpy-event" , state = "attached"
289+ )
290+ await button1 .click ()
291+ await button1 .click ()
292+ await button1 .click ()
293+ button2 = await display .page .wait_for_selector (
294+ "#button-with-javascript-event" , state = "attached"
295+ )
296+ await button2 .click ()
297+ await button2 .click ()
298+ await button2 .click ()
299+ parent = await display .page .wait_for_selector ("#the-parent" , state = "attached" )
300+ generated_divs = await parent .query_selector_all ("div" )
301+
302+ assert len (generated_divs ) == 6
0 commit comments