События

События — это то, как Reflex реагирует на действия пользователя, такие как нажатие кнопки, отправка формы или наведение курсора на элемент. В Reflex события вызывают обработчики событий в вашем классе State.

Обработчики событий

Обработчик событий — это метод в вашем классе состояния, который имеет логику.

class CounterState(rx.State):
    count: int = 0

    def increment(self):
        self.count += 1

Вы подключаете это в своем пользовательском интерфейсе, используя реквизиты компонента:

rx.el.button("Add", on_click=CounterState.increment)

Асинхронные обработчики и доходность

Если обработчик событий выполняет длительную задачу (например, вызов API), он должен быть async. Reflex также позволяет вам выполнять действия для постепенного обновления пользовательского интерфейса.

class SearchState(rx.State):
    results: list[str] = []
    loading: bool = False

    async def run_search(self, query: str):
        self.loading = True
        yield  # Update UI to show loading spinner

        # Simulate API call
        await asyncio.sleep(2)
        self.results = ["Result 1", "Result 2"]

        self.loading = False

Цепочка событий

Вы можете вызвать несколько событий из одного взаимодействия, передав список в свойство event.

rx.el.button(
    "Save", 
    on_click=[
        State.save_data,
        rx.toast("Data Saved!"),
        rx.redirect("/dashboard")
    ]
)

Общие триггеры событий

Триггеры, которые можно прикрепить к компонентам Reflex:

Событие Описание
on_click Срабатывает по клику мыши.
on_change Срабатывает при изменении входного значения.
on_submit Срабатывает при отправке формы.
on_mount Срабатывает, когда компонент впервые отображается на странице.
on_blur Срабатывает, когда компонент теряет фокус.

Специальные действия

Reflex предоставляет встроенные «Специальные действия», которые могут быть вызваны обработчиками:

Утилита Описание
rx.redirect(url) Перейдите на новую страницу.
rx.set_clipboard(text) Скопируйте текст в буфер обмена пользователя.
rx.toast(message) Показать краткое уведомление.
rx.call_script(js) Выполните собственный JavaScript в браузере.