【goed/ui】自定义组件设计思想篇

组件包(editor/editor.go)

go 复制代码
package editor

// Props 即契约 ------ 对应 TS 的 interface EditorProps

type Props struct {
    // ui.Props 可根据组件特性决定是否嵌入全局通用属性
    Path    string
    Focus   bool
    OnSave  func(content string)  // 事件就是普通字段,React 风格
}

// View 即组件 ------ 对应 const Editor: FC<Props>
var View = ui.ViewFn[Props](func(p *Props, children ...*ui.VNode) *ui.VNode {
    // p.Path、p.Focus 全部强类型,无需 GetProp/断言
    return ui.H("div", &ui.Props{Style: p.Style},
        ui.H("textarea", &ui.Props{Focus: p.Focus}),
    )
})

调用组件

go 复制代码
func NewApp(path string) *ui.ComponentDef {
    return ui.Component(func(_ *ui.SetupContext) func() *ui.VNode {
        return func() *ui.VNode {
            return ui.H(editor.View, &editor.Props{
                Style: ui.Style{Flex: 1},
                OnClick: func() {},
                Path:   path,
                Focus:  true,
                OnSave: func(c string) { save(c) },
            })
        }
    })
}

总结

不像vue3反倒像是react + ts的感觉了

底层从windows gdi提升到direct2d后,界面清晰度和抗锯齿效果都提升,但是启动内存也加了个几十MB,不过相对于webview还是低得多。

最新的electron系列应用占用内存也太多了

相关推荐
kuroomi1 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
daemon.qiang2 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
2401_869769593 小时前
linux 权限 指令与权限(重启之后)
linux
码农客栈3 小时前
Linux CAN 驱动
linux·驱动开发
2601_962364974 小时前
红外活体模组,Windows 设备安全身份入口解析
windows·安全·电脑
GeW5 小时前
红帽RHCE从挂科边缘到一次过,我做对了什么
linux
时空自由民.5 小时前
WSL解决USB 串口连接问题与linux串口权限问题
linux·单片机
OpenPomeloxCommunity5 小时前
Linux驱动基础(三):firmware的声明与加载
linux·操作系统
易点云徐源5 小时前
(已解决)Photoshop 2020 点击“选择主体”闪退:不用重装,1 个配置切回旧算法解决
windows·photoshop