API 参考
应用入口
public sealed class UltimateAppBuilder
{
public static UltimateAppBuilder CreateDefaultBuilder();
public UltimateAppBuilder UseRenderHost(Func<IRenderHost> renderHostFactory);
public UltimateApp Build();
}
public sealed class UltimateApp : IAsyncDisposable
{
public Window MainWindow { get; set; }
public ValueTask<int> RunAsync(CancellationToken ct = default);
}
public sealed class Window
{
public Window AttachGlobalStyle(CssModule styles);
public Window Render(Func<ComponentContext, Element> render);
}
默认应用入口会创建 WebKitGTK host、加载全局样式、mount 根组件并进入窗口事件循环。
ComponentApp
ComponentApp 是较底层的组件运行时;通常由 UltimateApp.RunAsync() 内部创建。
public sealed class ComponentApp : IAsyncDisposable
{
public ComponentApp(Func<ComponentContext, Element> render);
public ComponentApp(UltimateUiApp innerApp, Func<ComponentContext, Element> render);
public UltimateUiApp InnerApp { get; }
public Div HostElement { get; }
public Task PendingRender { get; }
public NodeHandle Mount();
public ValueTask<NodeHandle> MountAsync(CancellationToken ct = default);
public Task RenderAsync(CancellationToken ct = default);
public void Flush();
public ValueTask UseStylesAsync(CssModule module, CancellationToken ct = default);
}
ComponentContext
ComponentContext 只在 render 期间有效。
public sealed class ComponentContext
{
public ComponentApp App { get; }
public HookState<T> UseState<T>(T initialValue);
public HookState<T> UseState<T>(Func<T> initialValueFactory);
public ReducerState<TState, TAction> UseReducer<TState, TAction>(
Func<TState, TAction, TState> reducer,
TState initialState);
public T UseMemo<T>(Func<T> factory, params object?[] dependencies);
public void UseEffect(Action effect, params object?[] dependencies);
public void UseEffect(Func<IDisposable?> effect, params object?[] dependencies);
}
HookState
public sealed class HookState<T>
{
public T Value { get; }
public void Set(T value);
public void Update(Func<T, T> updater);
}
ReducerState
public sealed class ReducerState<TState, TAction>
{
public TState Value { get; }
public void Dispatch(TAction action);
}
CSS-in-CS
public static class Css
{
public static CssModule Module(string scope, params CssRule[] rules);
public static CssRule Class(string localName, Action<CssRuleBuilder> build);
public static CssRule Rule(string selector, Action<CssRuleBuilder> build);
}
public sealed class CssModule
{
public string Id { get; }
public CssClass ScopeClass { get; }
public IReadOnlyDictionary<string, CssClass> Classes { get; }
public string Text { get; }
public CssClass this[string localName] { get; }
}
CssClass 可以隐式转换为 string,可直接传给元素的 Class 属性。