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

Omix 1.0

https://user-gold-cdn.xitu.io/2017/8/8/bbe2ce1c1e7e925005df0f1cc8938374

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

  • Github

功能特性

  • 超级快的速度, 点击这里体验一下
  • 超小的尺寸, 7 KB (gzip)
  • 良好的兼容性 IE8
  • 内置支持JSX 和 hyperscript
  • 支持局部 CSS, 不用费尽心思去想选择器了,让CSS更加简单
  • 更自由的更新,每个组件都有 update 方法,可以自由选择最佳更新的时机,也可和第三方库集成实现双向绑定,退可以自己手动更新。进可攻退可守
  • 灵活的插件体系和丰富的插件生态
    • omi-router : Omi专属的官方Router插件.
    • omi-finger Omi的AlloyFinger插件,支持各种触摸事件和手势
    • omi-transform Omi的transformjs插件,快速方便地设置DOM的CSS3 Transform属性
    • omi-touch Omi的AlloyTouch插件,Omi项目的触摸运动解决方案(支持触摸滚动、旋转、翻页、选择等等)
  • 喜欢模板引擎、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
    "bestest-menu"> {items.map( item =>
  • "item" {...attrs(item.id)}>{item.title}
  • )}
复制代码

vs

// hyperscript-helpers
$.ul('#bestest-menu', items.map( item =>
  $.li('.item', attrs(item.id), item.title))
);复制代码
// JSX
{items.map(item => 
    
)}复制代码

vs

// hyperscript-helpers
$.MyList(items.map(item => 
    $.MyItem(item.id, item.title)
))复制代码
复制代码

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+='
Tap'
; } handleSwipe(evt){ this.refs.touchArea.innerHTML+='
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 创建用户界面)