{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T11:03:32Z","timestamp":1784199812328,"version":"3.55.0"},"reference-count":51,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","funder":[{"DOI":"10.13039\/501100003725","name":"National Research Foundation of Korea","doi-asserted-by":"publisher","award":["4199990214639"],"award-info":[{"award-number":["4199990214639"]}],"id":[{"id":"10.13039\/501100003725","id-type":"DOI","asserted-by":"publisher"}]},{"name":"Greenlabs Co., Ltd.","award":["0536-20220078"],"award-info":[{"award-number":["0536-20220078"]}]},{"DOI":"10.13039\/100004358","name":"Samsung Electronics Co., Ltd.","doi-asserted-by":"crossref","award":["0536-20230088"],"award-info":[{"award-number":["0536-20230088"]}],"id":[{"id":"10.13039\/100004358","id-type":"DOI","asserted-by":"crossref"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>\n                    React has become the most widely used web front-end framework, enabling the creation of user interfaces in a declarative and compositional manner. Hooks are a set of APIs that manage side effects in function components in React. However, their semantics are often seen as opaque to developers, leading to\n                    <jats:monospace>UI<\/jats:monospace>\n                    bugs. We introduce\n                    <jats:monospace>React-tRace<\/jats:monospace>\n                    , a formalization of the semantics of the essence of React Hooks, providing a semantics that clarifies their behavior. We demonstrate that our model captures the behavior of React, by theoretically showing that it embodies essential properties of Hooks and empirically comparing our\n                    <jats:monospace>React-tRace<\/jats:monospace>\n                    -definitional interpreter against a test suite. Furthermore, we showcase a practical visualization tool based on the formalization to demonstrate how developers can better understand the semantics of Hooks.\n                  <\/jats:p>","DOI":"10.1145\/3763067","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:49:50Z","timestamp":1759999790000},"page":"471-498","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["React-tRace: A Semantics for Understanding React Hooks: An Operational Semantics and a Visualizer for Clarifying React Hooks"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-2224-4861","authenticated-orcid":false,"given":"Jay","family":"Lee","sequence":"first","affiliation":[{"name":"Seoul National University, Seoul, Republic of Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0007-0055-7297","authenticated-orcid":false,"given":"Joongwon","family":"Ahn","sequence":"additional","affiliation":[{"name":"Seoul National University, Seoul, Republic of Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0007-5027-2177","authenticated-orcid":false,"given":"Kwangkeun","family":"Yi","sequence":"additional","affiliation":[{"name":"Seoul National University, Seoul, Republic of Korea"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_3_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/2220365.2220369"},{"key":"e_1_3_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2784731.2784741"},{"key":"e_1_3_2_4_1","doi-asserted-by":"publisher","unstructured":"AdamChlipala.2015.Ur\/Web: A Simple Model for Programming the Web.In Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL \u201915).Association for Computing Machinery New York NY USA 153\u2013165. doi: 10.1145\/2676726.2677004","DOI":"10.1145\/2676726.2677004"},{"key":"e_1_3_2_5_1","doi-asserted-by":"publisher","unstructured":"EzraCooper SamLindley and PhilipWadler.2007.Links: Web Programming Without Tiers.In Formal Methods for Components and Objects (FMCO \u201906) Lecture Notes in Computer Science Vol. 4709.Springer Berlin Heidelberg Berlin Heidelberg 266\u2013296. doi: 10.1007\/978-3-540-74792-5_12","DOI":"10.1007\/978-3-540-74792-5_12"},{"key":"e_1_3_2_6_1","doi-asserted-by":"publisher","unstructured":"PatrickCousot and RadhiaCousot.1977.Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints.In Proceedings of the 4th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL \u201977).Association for Computing Machinery New York NY USA 238\u2013252. doi: 10.1145\/512950.512973","DOI":"10.1145\/512950.512973"},{"key":"e_1_3_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/3632865"},{"key":"e_1_3_2_8_1","doi-asserted-by":"publisher","unstructured":"EvanCzaplicki and StephenChong.2013.Asynchronous Functional Reactive Programming for GUIs.In Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI \u201913).Association for Computing Machinery New York NY USA 411\u2013422. doi: 10.1145\/2491956.2462161","DOI":"10.1145\/2491956.2462161"},{"key":"e_1_3_2_9_1","unstructured":"DioxusLabs.2024.Hooks and component state.https:\/\/dioxuslabs.com\/learn\/0.6\/reference\/hooks\/.Accessed: 2025-03-25"},{"key":"e_1_3_2_10_1","doi-asserted-by":"publisher","unstructured":"ConalElliott and PaulHudak.1997.Functional Reactive Animation.In Proceedings of the Second ACM SIGPLAN International Conference on Functional Programming (ICFP \u201997).Association for Computing Machinery New York NY USA 263\u2013273. doi: 10.1145\/258948.258973","DOI":"10.1145\/258948.258973"},{"key":"e_1_3_2_11_1","unstructured":"Richard Feldman.2020.Elm in Action.Manning Publications Shelter Island NY."},{"key":"e_1_3_2_12_1","doi-asserted-by":"publisher","unstructured":"SimonFowler.2020.Model-View-Update-Communicate: Session Types Meet the Elm Architecture.In 34th European Conference on Object-Oriented Programming (ECOOP 2020) Leibniz International Proceedings in Informatics (LIPIcs) Vol. 166.Schloss Dagstuhl \u2013 Leibniz-Zentrum f\u00fcr Informatik Dagstuhl Germany 14:1\u201314:28. doi: 10.4230\/LIPIcs.ECOOP.2020.14","DOI":"10.4230\/LIPIcs.ECOOP.2020.14"},{"key":"e_1_3_2_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158138"},{"key":"e_1_3_2_14_1","doi-asserted-by":"publisher","unstructured":"ArjunGuha ClaudiaSaftoiu and ShriramKrishnamurthi.2010.The Essence of JavaScript.In Proceedings of the 24th European Conference on Object-Oriented Programming (ECOOP 2010) Lecture Notes in Computer Science Vol. 6183.Springer Berlin Heidelberg Berlin Heidelberg 126\u2013150. doi: 10.1007\/978-3-642-14107-2_7","DOI":"10.1007\/978-3-642-14107-2_7"},{"key":"e_1_3_2_15_1","doi-asserted-by":"publisher","unstructured":"GillesKahn.1987.Natural Semantics.In STACS 87 (Lecture Notes in Computer Science Vol. 247).Springer Berlin Heidelberg Berlin Heidelberg 22\u201339. doi: 10.1007\/BFb0039592","DOI":"10.1007\/BFb0039592"},{"key":"e_1_3_2_16_1","unstructured":"JayLee.2025.A screenshot of the StackOverflow search results of \u201cuseEffect\u201d \u201cinfinite\u201d.https:\/\/archive.org\/details\/useeffect-infinite.Accessed: 2025-03-24"},{"key":"e_1_3_2_17_1","doi-asserted-by":"publisher","unstructured":"JayLee and JoongwonAhn.2025.Artifact for \u201cReact-Trace: A Semantics for Understanding React Hooks\u201d.https:\/\/doi.org\/10.5281\/zenodo.16916356 10.5281\/zenodo.16916356","DOI":"10.5281\/zenodo.16916356"},{"key":"e_1_3_2_18_1","doi-asserted-by":"publisher","unstructured":"MagnusMadsen Ond\u0159ejLhot\u00e1k and FrankTip.2017.A Model for Reasoning About JavaScript Promises. Proc. ACM Program. Lang.1 OOPSLA Article 86 (Oct. 2017) 24 pages. doi: 10.1145\/3133910","DOI":"10.1145\/3133910"},{"key":"e_1_3_2_19_1","doi-asserted-by":"publisher","unstructured":"MagnusMadsen Ond\u0159ejLhot\u00e1k and FrankTip.2020.A Semantics for the Essence of React.In 34th European Conference on Object-Oriented Programming (ECOOP 2020) Leibniz International Proceedings in Informatics (LIPIcs) Vol. 166.Schloss Dagstuhl \u2013 Leibniz-Zentrum f\u00fcr Informatik Dagstuhl Germany 12:1\u201312:26. doi: 10.4230\/LIPIcs.ECOOP.2020.12","DOI":"10.4230\/LIPIcs.ECOOP.2020.12"},{"key":"e_1_3_2_20_1","doi-asserted-by":"publisher","unstructured":"SergioMaffeis John C.Mitchell and AnkurTaly.2008.An Operational Semantics for JavaScript.In Programming Languages and Systems (APLAS \u201908) Lecture Notes in Computer Science Vol. 5356.Springer Berlin Heidelberg Berlin Heidelberg 307\u2013325. doi: 10.1007\/978-3-540-89330-1_22","DOI":"10.1007\/978-3-540-89330-1_22"},{"key":"e_1_3_2_21_1","unstructured":"MetaPlatforms Inc..2022.JSX.https:\/\/facebook.github.io\/jsx\/.Accessed: 2025-03-24"},{"key":"e_1_3_2_22_1","unstructured":"MetaPlatforms Inc..2025a.Component \u2013 React.https:\/\/react.dev\/reference\/react\/Component.Accessed: 2025-03-12"},{"key":"e_1_3_2_23_1","unstructured":"MetaPlatforms Inc..2025b.Higher-Order Components \u2013 React.https:\/\/legacy.reactjs.org\/docs\/higher-order-components.html.Accessed: 2025-03-18"},{"key":"e_1_3_2_24_1","unstructured":"MetaPlatforms Inc..2025c.Queueing a Series of State Updates \u2013 React.https:\/\/react.dev\/learn\/queueing-a-series-of-state-updates.Accessed: 2025-03-12"},{"key":"e_1_3_2_25_1","unstructured":"MetaPlatforms Inc..2025d.React Compiler \u2013 React.https:\/\/react.dev\/learn\/react-compiler.Accessed: 2025-03-25"},{"key":"e_1_3_2_26_1","unstructured":"MetaPlatforms Inc..2025e.Reconciliation \u2013 React.https:\/\/legacy.reactjs.org\/docs\/reconciliation.html.Accessed: 2025-07-23"},{"key":"e_1_3_2_27_1","unstructured":"MetaPlatforms Inc..2025f.Render and Commit \u2013 React.https:\/\/react.dev\/learn\/render-and-commit.Accessed: 2025-03-25"},{"key":"e_1_3_2_28_1","unstructured":"MetaPlatforms Inc..2025g.Rules of Hooks \u2013 React.https:\/\/react.dev\/reference\/rules\/rules-of-hooks.Accessed: 2025-03-12"},{"key":"e_1_3_2_29_1","unstructured":"MetaPlatforms Inc..2025h.Rules of React \u2013 React.https:\/\/react.dev\/reference\/rules.Accessed: 2025-03-12"},{"key":"e_1_3_2_30_1","unstructured":"MetaPlatforms Inc..2025i.Synchronizing with Effects \u2013 React.https:\/\/react.dev\/learn\/synchronizing-with-effects.Accessed: 2025-03-12"},{"key":"e_1_3_2_31_1","unstructured":"MetaPlatforms Inc..2025j.useState \u2013 React.https:\/\/react.dev\/reference\/react\/useState.Accessed: 2025-03-25"},{"key":"e_1_3_2_32_1","doi-asserted-by":"publisher","unstructured":"Leo A.Meyerovich ArjunGuha JacobBaskin Gregory H.Cooper MichaelGreenberg AleksBromfield and ShriramKrishnamurthi.2009.Flapjax: A Programming Language for Ajax Applications.In Proceedings of the 24th ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA \u201909).Association for Computing Machinery New York NY USA 1\u201320. doi: 10.1145\/1640089.1640091","DOI":"10.1145\/1640089.1640091"},{"key":"e_1_3_2_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/3360577"},{"key":"e_1_3_2_34_1","doi-asserted-by":"publisher","unstructured":"PavelPanchekha Adam T.Geller Michael D.Ernst ZacharyTatlock and ShoaibKamil.2018.Verifying That Web Pages Have Accessible Layout.In Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI \u201918).Association for Computing Machinery New York NY USA 1\u201314. doi: 10.1145\/3192366.3192407","DOI":"10.1145\/3192366.3192407"},{"key":"e_1_3_2_35_1","doi-asserted-by":"publisher","unstructured":"PavelPanchekha and EminaTorlak.2016.Automated Reasoning for Web Page Layout.In Proceedings of the 2016 ACM SIGPLAN International Conference on Object-Oriented Programming Systems Languages and Applications (OOPSLA \u201916).Association for Computing Machinery New York NY USA 181\u2013194. doi: 10.1145\/2983990.2984010","DOI":"10.1145\/2983990.2984010"},{"key":"e_1_3_2_36_1","doi-asserted-by":"publisher","unstructured":"DaejunPark AndreiStef\u0103nescu and GrigoreRo\u0219u.2015.KJS: A Complete Formal Semantics of JavaScript.In Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI \u201915).Association for Computing Machinery New York NY USA 346\u2013356. doi: 10.1145\/2737924.2737991","DOI":"10.1145\/2737924.2737991"},{"key":"e_1_3_2_37_1","doi-asserted-by":"publisher","unstructured":"JihyeokPark JiheePark SeungminAn and SukyoungRyu.2021.JIST: JavaScript IR-based Semantics Extraction Toolchain.In Proceedings of the 35th IEEE\/ACM International Conference on Automated Software Engineering (ASE \u201920).Association for Computing Machinery New York NY USA 647\u2013658. doi: 10.1145\/3324884.3416632","DOI":"10.1145\/3324884.3416632"},{"key":"e_1_3_2_38_1","doi-asserted-by":"publisher","unstructured":"JoeGibbs Politz MatthewCarroll Benjamin S.Lerner JustinPombrio and ShriramKrishnamurthi.2012.Tested Semantics for Getters Setters and Eval in JavaScript.In Proceedings of the 8th Symposium on Dynamic Languages (DLS \u201912).Association for Computing Machinery New York NY USA 16\u201326. doi: 10.1145\/2384577.2384579","DOI":"10.1145\/2384577.2384579"},{"key":"e_1_3_2_39_1","unstructured":"Pranjal.2019.The useState set method is not reflecting a change immediately.https:\/\/stackoverflow.com\/q\/54069253.Accessed: 2025-03-24"},{"key":"e_1_3_2_40_1","doi-asserted-by":"publisher","unstructured":"GabrielRadanne VasilisPapavasileiou J\u00e9r\u00f4meVouillon and VincentBalat.2016a.Eliom: tierless Web programming from the ground up.In Proceedings of the 28th Symposium on the Implementation and Application of Functional Programming Languages (IFL \u201916).Association for Computing Machinery New York NY USA Article 8 12 pages. doi: 10.1145\/3064899.3064901","DOI":"10.1145\/3064899.3064901"},{"key":"e_1_3_2_41_1","doi-asserted-by":"crossref","unstructured":"GabrielRadanne J\u00e9r\u00f4meVouillon and VincentBalat.2016b.Eliom: A Core ML Language for Tierless Web Programming.In Programming Languages and Systems. Springer International Publishing Cham 377\u2013397.","DOI":"10.1007\/978-3-319-47958-3_20"},{"key":"e_1_3_2_42_1","unstructured":"XavierRival and KwangkeunYi.2020.Introduction to Static Analysis: An Abstract Interpretation Perspective.The MIT Press Cambridge Massachusetts."},{"key":"e_1_3_2_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/3624723"},{"key":"e_1_3_2_44_1","unstructured":"ManuelSerrano ErickGallesio and FlorianLoitsch.2006.Hop a Language for Programming the Web 2.0.In Companion to the 21st ACM SIGPLAN Symposium on Object-Oriented Programming Systems Languages and Applications (OOPSLA \u201906).Association for Computing Machinery New York NY USA 975\u2013985."},{"key":"e_1_3_2_45_1","unstructured":"StackExchange Inc..2024.2024 Stack Overflow Developer Survey.https:\/\/survey.stackoverflow.co\/2024\/.Accessed: 2025-01-21"},{"key":"e_1_3_2_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/2980991"},{"key":"e_1_3_2_47_1","unstructured":"QuocVan Tang.2019.React hooks useState setValue still rerender one more time when value is equal.https:\/\/stackoverflow.com\/q\/57652176.Accessed: 2025-03-24"},{"key":"e_1_3_2_48_1","unstructured":"Tehila.2022.Updating state to the same value directly in the component body during render causes infinite loop.https:\/\/stackoverflow.com\/q\/74034014.Accessed: 2025-03-24"},{"key":"e_1_3_2_49_1","unstructured":"vadirn.2018.Does React batch state update functions when using hooks?.https:\/\/stackoverflow.com\/q\/53048495.Accessed: 2025-03-24"},{"key":"e_1_3_2_50_1","doi-asserted-by":"publisher","unstructured":"LorenzoVeronese BenjaminFarinier PedroBernardo MauroTempesta MarcoSquarcina and MatteoMaffei.2023.WebSpec: Towards Machine-Checked Analysis of Browser Security Mechanisms.In 2023 IEEE Symposium on Security and Privacy (SP \u201923).IEEE San Francisco CA USA 2761\u20132779. doi: 10.1109\/sp46215.2023.10179465","DOI":"10.1109\/sp46215.2023.10179465"},{"key":"e_1_3_2_51_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.2187"},{"key":"e_1_3_2_52_1","doi-asserted-by":"publisher","DOI":"10.1145\/3397495"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763067","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:03:36Z","timestamp":1784196216000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763067"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":51,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763067"],"URL":"https:\/\/doi.org\/10.1145\/3763067","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2025-03-25","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}