FuncUI
GitHub Repository
  • Getting Started
  • View Basics
    • Creating views
    • Lifetime
    • Attributes
    • How to create bindings
  • Components
    • Component basics
    • Component lifetime
    • Hooks
  • Common Questions
  • Controls
    • Button
    • Border
    • Calendar
    • CalendarDatePicker
    • CheckBox
    • DatePicker
    • DockPanel
    • Expander
    • ListBox
    • Menu
    • NativeMenu
    • NumericUpDown
    • ProgressBar
    • RadioButton
    • RepeatButton
    • Slider
    • StackPanel
    • Tabs
    • TextBlock
    • TextBox
    • TimePicker
    • ToggleButton
    • ToggleSwitch
Powered by GitBook
On this page
  • Component (fun ctx -> ...)
  • Component.create ("key", fun ctx -> ...)
  1. Components

Component basics

FuncUI offers a Component inspired by ReactJS. Components allow you to organize views into reusable pieces.

There are two ways of creating a component.

Component (fun ctx -> ...)

Creating a component using the regular constructor of the Component class. Component inherits from Border and therefore can be used like any other Avalonia control.

// create a Component that can be directly used in a Avalonia app
let component: Component = Component (fun ctx -> 
    TextBlock.create [
        TextBlock.text "Hello World!"
    ]
)

// use component as main view of an app
type MainWindow() as this =
    inherit HostWindow()
    do
        this.Content <- component

// embedd component in avalonia app
let control: ContentControl = ..
control.Content <- component
// Creating a component using the View DSL.
// The resulting IView can be used inside other components and with the View DSL.

Component.create ("key", fun ctx -> ...)

Declaratively describes a component. Can be embedded in other views as this returns an IView

let greetingView (): IView = 
    Component.create ("greetingView", fun ctx -> 
        TextBlock.create [
            TextBlock.text "Hello World!"
        ]
    )

let view (): IView = 
    Component.create ("mainView", fun ctx -> 
        DockPanel.create [
            DockPanel.children [
                // use other component
                greetingView ()
            ]
        ]
    )

Last updated 10 months ago