腾讯发布 Omix 1.0 - 用 JSX 或 hyperscript 创建用户界面

今天,腾讯正式开源发布 Omix 1.0, 让开发者使用 JSX 或 hyperscript 创建用户界面。

功能特性

  • 超级快的速度, 点击这里体验一下
  • 超小的尺寸, 7 KB (gzip)
  • 良好的兼容性 IE8
  • 内置支持JSX 和 hyperscript
  • 支持局部 CSS, 不用费尽心思去想选择器了,让CSS更加简单
  • 更自由的更新,每个组件都有 update 方法,可以自由选择最佳更新的时机,也可和第三方库集成实现双向绑定,退可以自己手动更新。进可攻退可守
  • 灵活的插件体系和丰富的插件生态
  • 喜欢模板引擎、ES6模板字符串的可以使用 Omix 的API大体相同的兄弟框架 Omi,而且上面的插件 Omi 和 Omix 都可以共享使用

    Omix

使用 JSX

class Hello extends Omi.Component {
    render() {
        return <div> Hello {this.data.name}!</div>
    }
}

Omi.tag('hello', Hello)

class App extends Omi.Component {
    install() {
        this.name = 'Omi'
    }

    handleClick(e) {
        this.name = 'Omix'
        this.update()
    }

    style() {
        return `h3{
                color:red;
                cursor: pointer;
            }`
    }

    render() {
        return <div>
                <hello name={this.name}></hello>
                <h3 onclick={this.handleClick.bind(this)}>Scoped css and event test! click me!</h3>
            </div>
    }
}

Omi.render(new App(), '#container')

使用 hyperscript

const $ = Omi.tags

class Hello extends Omi.Component {
    render() {
        return $.div( 'Hello' + this.data.name+'!')
    }
}

Omi.tag('hello-tag', Hello)

class App extends Omi.Component {
    handleClick(e) {
        alert(e.target.innerHTML)
    }

    render() {
        return $.div([
                $.HelloTag({name: 'Omi'}),
                $.h3({onclick: this.handleClick}, 'scoped css and event test! click me!')
            ])
    }
}

hyperscript API

const $ = Omi.tags
$.tagName(selector)
$.tagName(attrs)
$.tagName(children)
$.tagName(attrs, children)
$.tagName(selector, children)
$.tagName(selector, attrs, children)

JSX vs hyperscript

海外有大量的工程师觉得的 hyperscript 比 JSX 要更加简洁和方便,但是我们团队内部喜欢 JSX 和 hyperscript 一半一半。但是没有关系 Omix 同时支持两种方式。下面稍微对比一下两者的使用差异:

// JSX
<ul id="bestest-menu">
  {items.map( item =>
    <li className=".item" {...attrs(item.id)}>{item.title}</li>
  )}
</ul>

vs

// hyperscript-helpers
$.ul('#bestest-menu', items.map( item =>
  $.li('.item', attrs(item.id), item.title))
);
// JSX
<MyList>{items.map(item =>
    <MyItem id={item.id} title={item.title} />
)}</MyList>

vs

// hyperscript-helpers
$.MyList(items.map(item =>
    $.MyItem(item.id, item.title)
))
<MyComponent someProp={{x: 1, y: 2}}/>

vs

$.MyComponent({x: 1, y: 2})

插件举例

Omix 对插件体系进行了升级,使用方便比从前更加简便,这里拿 omi-finger 作为例子, omi-finger 是 Omi的AlloyFinger插件,让你轻松在Omi项目里支持各种触摸事件和手势:

通过npm安装

npm install omi-finger

使用

import Omi from 'omix';
import 'omi-finger';

class App extends Omi.Component {
    handleTap(evt){
        this.refs.touchArea.innerHTML+='<br/>Tap';
    }

    handleSwipe(evt){
        this.refs.touchArea.innerHTML+='<br/>Swipe-'+ evt.direction;
    }

    render() {
        return  <div>
                <div omi-finger ref="touchArea" tap="handleTap"  swipe="handleSwipe" >
                    Tap or Swipe Me!
                </div>
            </div>
    }
}

Omi.render(new App(),"#container");

是不是超级简便。还在等什么,用到就是赚到,赶紧开始阅读 中文文档 或者在 Omi REPL 把玩一下!

License

This content is released under the MIT License.

腾讯发布 Omix 1.0 - 用 JSX 或 hyperscript 创建用户界面的更多相关文章

  1. 预计2019年发布的Vue3.0到底有什么不一样的地方?

    摘要: Vue 3.0预览. 原文:预计今年发布的Vue3.0到底有什么不一样的地方? 作者:小肆 微信公众号:技术放肆聊 Fundebug经授权转载,版权归原作者所有. 还有几个月距离 vue2 的 ...

  2. 如何将ASP.NET-WebApi发布到IIS6.0上(转)

    关于"如何将ASP.NET-WebApi发布到IIS6.0上"的这方面的学习,一开始项目组长让我们接触的时候,我的心情是这样的 哇呜.jpg 当时真的是一脸懵逼啊,对于刚接触asp ...

  3. spring boot 2.0(一)权威发布spring boot2.0

    Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...

  4. 发布.net 4.0的站点到IIS7.5下时无法访问

    现象: 初始发布.net 4.0站点到IIS7.5下时,各种配置都完毕的情况下依旧无法访问.首页显示站点目录结构(注:开启目录结构访问后会显示这个错误,否则会提示开启),访问次级目录提示:Handle ...

  5. 阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性

    近日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高.使 ...

  6. 龙芯发布.NET 6.0.100开发者试用版

    龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者试用版 新闻 ,龙芯.NET基于上游社区 版本 适配支持龙芯平台架构. 目前支持LoongArch64架构和MIP ...

  7. Swift3.0语言教程使用编码创建和初始化字符串

    Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...

  8. Swift3.0语言教程使用指针创建和初始化字符串

    Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...

  9. Swift3.0语言教程使用字符串创建和初始化字符串

    Swift3.0语言教程使用字符串创建和初始化字符串 Swift3.0语言教程使用字符串创建和初始化字符串,在编程语言中,字面值是很常见的数据描述形式.人们可以通过字面所表达的意思,获知其含义,尤其是 ...

随机推荐

  1. linux环境下创建和删除软链接

    ln -s /home/zhenwx/htccode-v1/ /home/zhenwx/htccode 建立/home/zhenwx/htccode-v1 的软连接 linux下的软链接类似于wind ...

  2. Example017简单的下拉框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. H5本地储存Web Storage

    一.本地存储由来的背景 由于HTML4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是Cookie的这些限制,也就导致了C ...

  4. Unity 游戏框架搭建 (一) 概述

      为了重构手头的一款项目,翻出来当时未接触Unity时候收藏的视频<Unity项目架构设计与开发管理>,对于我这种初学者来说全是干货.简单的总结了一下,以后慢慢提炼. 关于Unity的架 ...

  5. 关于mysql查询数据库时间和系统时间差

    1. MySQL数据库表中有两个时间的字段,需要计算他们的时间差: (1)datediff函数来表示时间差. 基本语法: DATEDIFF(datepart,startdate,enddate) 说明 ...

  6. 进程间通信之AIDL

    一.引言 AIDL是android内部进程通信接口的描述语言,是实现跨进程方法调用的一大利器,其中Binder和Messenger的实现机制都是AIDL. 二.使用下面结合示例说明其使用过程: 本次示 ...

  7. Vijos 1034 家族 并查集

    描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚 ...

  8. 开源自己写的图片转Ascii码图工具

    GitHub地址:https://github.com/qiangzi7723/img2Ascii 如果觉得不错可以给个star或者提出你的建议 img2Ascii,基于JS的图片转ASCII示意图. ...

  9. 虚拟机配置静态IP地址

    使用VMware配置虚拟机静态IP地址 一.安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子 ...

  10. RecyclerView线性分割线

    由于recyclerview默认是没有分割线的,需要显示分割线的话,可以在布局里添加一条有背景色的View标签,或者通过ItemDecoration来实现,本文以后者为例. ItemDecoratio ...