Skip to content

Commit 57e7fbc

Browse files
committed
Address feedback comments
1 parent fb86e1b commit 57e7fbc

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

reflex/state.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import functools
1212
import inspect
1313
import pickle
14+
import re
1415
import sys
1516
import time
1617
import typing
@@ -2471,15 +2472,23 @@ def wrapper() -> Component:
24712472
return wrapper
24722473

24732474

2475+
# sessionStorage key holding the ms timestamp of the last reload on error
2476+
LAST_RELOADED_KEY = "reflex_last_reloaded_on_error"
2477+
2478+
24742479
class FrontendEventExceptionState(State):
24752480
"""Substate for handling frontend exceptions."""
24762481

24772482
# If the frontend error message contains any of these strings, automatically reload the page.
2478-
auto_reload_on_errors: ClassVar[list[str]] = [
2479-
"TypeError: Cannot read properties of null",
2483+
auto_reload_on_errors: ClassVar[list[re.Pattern]] = [
2484+
re.compile( # Chrome/Edge
2485+
re.escape("TypeError: Cannot read properties of null")
2486+
),
2487+
re.compile(re.escape("TypeError: null is not an object")), # Safari
2488+
re.compile(r"TypeError: can't access property \".*\" of null"), # Firefox
24802489
]
24812490
# Reload the page only once per cooldown period to avoid reload loops.
2482-
auto_reload_cooldown_time_ms: ClassVar[int] = 10000
2491+
auto_reload_cooldown_time_ms: ClassVar[int] = 10000 # 10 seconds
24832492

24842493
@event
24852494
def handle_frontend_exception(
@@ -2499,12 +2508,15 @@ def handle_frontend_exception(
24992508
"""
25002509
# Handle automatic reload for certain errors.
25012510
if type(self).auto_reload_on_errors and any(
2502-
error in info for error in type(self).auto_reload_on_errors
2511+
error.search(info) for error in type(self).auto_reload_on_errors
25032512
):
25042513
yield call_script(
2505-
"const last_reload = parseInt(window.sessionStorage.getItem('reflex_last_reloaded_on_error')) || 0;"
2514+
f"const last_reload = parseInt(window.sessionStorage.getItem('{LAST_RELOADED_KEY}')) || 0;"
25062515
f"if (Date.now() - last_reload > {type(self).auto_reload_cooldown_time_ms})"
2507-
"{window.sessionStorage.setItem('reflex_last_reloaded_on_error', Date.now().toString()); window.location.reload(true);}"
2516+
"{"
2517+
f"window.sessionStorage.setItem('{LAST_RELOADED_KEY}', Date.now().toString());"
2518+
"window.location.reload(true);"
2519+
"}"
25082520
)
25092521
prerequisites.get_and_validate_app().app.frontend_exception_handler(
25102522
Exception(info)

0 commit comments

Comments
 (0)