Py.Cafe

jhsmit/

solara-dataclass-ref-continous

Solara Interactive Data Manipulator

DocsPricing
  • app.py
  • input_numeric.py
  • requirements.txt
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import solara
import dataclasses
from solara.toestand import Ref
from input_numeric import InputNumeric

@dataclasses.dataclass
class MyData:

    value: float = 10.
    other_value: float = 20.

float_value = solara.reactive(42.0)
continuous_update = solara.reactive(True)

my_data = solara.reactive(MyData())

@solara.component
def Page():
    ref = Ref(my_data.fields.value)
    other_ref = Ref(my_data.fields.other_value)
    solara.Checkbox(label="Continuous update", value=continuous_update)


    InputNumeric("Other value in dataclass via ref", value=other_ref, continuous_update=continuous_update.value)

    solara.InputFloat("Value in dataclass via ref", value=ref, continuous_update=continuous_update.value)
    solara.InputFloat("Value in reactive", value=float_value, continuous_update=continuous_update.value)
    with solara.Row():
        solara.Button("Clear", on_click=lambda: float_value.set(42.0))
    solara.Markdown(f"**You entered**: {float_value.value}")

    # comment these out and the problem goes away:
    solara.Text(str(my_data.value))
    solara.Text(str(ref.value))

    solara.Text(str(my_data.value.other_value))
    solara.Text(str(type(my_data.value.other_value)))