PythonIDE Docs
中文
简体中文

状态 API

State、ReactiveState、NavigationPath、Timer 和 Ref。

本页查 StatePersistentStateReactiveStateNavigationPathTimerRefPropObservableListObservableDict 的签名和边界。状态写法的完整解释见 状态管理

#什么时候用

目标API
普通表单、按钮、列表筛选State
明确指定持久化状态PersistentState
高频字段快路径ReactiveState
程序化导航栈NavigationPath
定时执行回调Timer
保存不触发 UI 刷新的句柄Ref
自定义实时属性Prop
观察 list / dict 局部变更ObservableList / ObservableDict

#State 示例

python
import appui

state = appui.State(count=0, saved=False)
save_count = appui.Ref(0)


def increment():
    state.batch_update(count=state.count + 1, saved=False)


def save():
    save_count.current += 1
    state.saved = True


def body():
    status = "Saved" if state.saved else "Editing"
    return appui.NavigationStack(
        appui.Form([
            appui.Section("State", [
                appui.LabeledContent("Count", value=str(state.count)),
                appui.LabeledContent("Status", value=status),
                appui.LabeledContent("Save count", value=str(save_count.current)),
                appui.Button("+1", action=increment),
                appui.Button("Save", action=save).button_style("bordered_prominent"),
            ])
        ]).navigation_title("State")
    )


appui.run(body, state=state)

#Timer 示例

python
import appui

state = appui.State(seconds=0, running=False)


def tick():
    if state.running:
        state.seconds += 1


timer = appui.Timer(interval=1.0, repeats=True, action=tick)


def start():
    state.running = True
    timer.start()


def stop():
    state.running = False
    timer.stop()


def body():
    return appui.NavigationStack(
        appui.Form([
            appui.Section("Timer", [
                appui.LabeledContent("Seconds", value=str(state.seconds)),
                appui.HStack([
                    appui.Button("Start", action=start).button_style("bordered_prominent"),
                    appui.Button("Stop", action=stop).button_style("bordered"),
                ], spacing=12),
            ])
        ]).navigation_title("Timer")
    )


appui.run(body, state=state)

#状态签名

API签名分类
StateState(persist: Optional[Union[bool, Sequence[str]]] = None, persist_key: Optional[str] = None, transient: Optional[Sequence[str]] = None, debounce: float = 0.3, **kwargs: Any)公开类型
PersistentStatePersistentState(persist_key: Optional[str] = None, transient: Optional[Sequence[str]] = None, debounce: float = 0.3, **kwargs: Any)公开类型
ReactiveStateReactiveState(**kwargs: Any)公开类型
NavigationPathNavigationPath()公开类型
TimerTimer(interval: float = 1.0, repeats: bool = True, action: Optional[Callable[[], None]] = None)公开类型
RefRef(initial: Any = None)公开类型
PropProp(prop_id: int, val_type: str = 'auto', default: Any = None, attr: Optional[str] = None)公开类型
ObservableListObservableList(data: Iterable[Any], notify: Callable[[], None])公开类型
ObservableDictObservableDict(data: Mapping[Any, Any], notify: Callable[[], None])公开类型

#主要方法

API方法签名所属类型
Statebatch_updatebatch_update(**kwargs: Any) -> NoneState
Stateto_dictto_dict() -> Dict[str, Any]State
Stategetget(key: str, default: Any = None) -> AnyState
Stateflush_persistedflush_persisted() -> boolState
Stateclear_persistedclear_persisted() -> boolState
ReactiveStatebatch_updatebatch_update(**kwargs: Any) -> NoneReactiveState
ReactiveStateto_dictto_dict() -> Dict[str, Any]ReactiveState
ReactiveStategetget(key: str, default: Any = None) -> AnyReactiveState
ReactiveStatebindbind(field_name: str, *, parse: Optional[Callable[[Any], Any]] = None, format: Optional[Callable[[Any], Any]] = None, validate: Optional[Callable[[Any], bool]] = None) -> Dict[str, Any]ReactiveState
ReactiveStatebind_handlesbind_handles(**bindings: int) -> NoneReactiveState
NavigationPathappendappend(view_or_value: Union["View", str, int, Dict[str, Any]]) -> NoneNavigationPath
NavigationPathpoppop(count: int = 1) -> NoneNavigationPath
NavigationPathpop_to_rootpop_to_root() -> NoneNavigationPath
NavigationPathreplacereplace(items: Sequence[Any]) -> NoneNavigationPath
Timerstartstart() -> NoneTimer
Timerstopstop() -> NoneTimer

#相邻 API 区别

API用法边界
State vs ReactiveState普通页面用 State;高频字段才用 ReactiveState
State(persist=...) vs PersistentState简单保存可用 State(persist=True);需要固定持久化 key 或更清晰语义时用 PersistentState
Ref vs State需要显示到 UI 的值用 State;句柄、缓存、连接对象用 Ref
ObservableList vs 重新赋值频繁局部增删改可依赖可观察容器;简单场景重新赋值更直观。
Timer vs auto_refresh正式页面用 Timer;临时 demo 可用 auto_refresh
NavigationPath vs NavigationLink固定行详情用 NavigationLink;程序化跳转用 NavigationPath

#常见错误

错误后果修正
把 UI 要显示的值放进 Ref改值后界面不刷新放进 State
body() 里创建 Timer每次重建都可能新建计时器模块级创建。
先创建没有回调的 Timer,再事后赋 action容易漏掉回调初始化时传 action=tick
连续写多个字段产生多次重建和中间状态使用 batch_update
列表按过滤后的下标修改搜索后操作错行数据项保留稳定 id。

#相关文档

文档用途
状态管理状态模式、computed/effect、Timer。
导航与页面结构NavigationPathNavigationLink
性能与实时界面什么时候使用 ReactiveState