diff --git a/reflex/vars.py b/reflex/vars.py index 49b395ac7..2f31f1190 100644 --- a/reflex/vars.py +++ b/reflex/vars.py @@ -209,7 +209,11 @@ def _decode_var(value: str) -> tuple[VarData | None, str]: var_datas = [] if isinstance(value, str): # Extract the state name from a formatted var - while m := re.match(r"(.*)(.*)(.*)", value): + while m := re.match( + pattern=r"(.*)(.*)(.*)", + string=value, + flags=re.DOTALL, # Ensure . matches newline characters. + ): value = m.group(1) + m.group(3) try: var_datas.append(VarData.parse_raw(m.group(2))) diff --git a/tests/test_var.py b/tests/test_var.py index 8e7358bf5..a6b9deeae 100644 --- a/tests/test_var.py +++ b/tests/test_var.py @@ -638,9 +638,20 @@ def test_extract_state_from_container(value, expect_state): assert Var.create_safe(value)._var_state == expect_state -def test_fstring_roundtrip(): - """Test that f-string roundtrip carries state.""" - var = BaseVar.create_safe("var")._var_set_state("state") +@pytest.mark.parametrize( + "value", + [ + "var", + "\nvar", + ], +) +def test_fstring_roundtrip(value): + """Test that f-string roundtrip carries state. + + Args: + value: The value to create a Var from. + """ + var = BaseVar.create_safe(value)._var_set_state("state") rt_var = Var.create_safe(f"{var}") assert var._var_state == rt_var._var_state assert var._var_full_name_needs_state_prefix