跳到主要内容

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 属性。