騰訊發佈 Omix 1.0 - 用 JSX 或 hyperscript 創建用戶界面

来源:http://www.cnblogs.com/iamzhanglei/archive/2017/08/08/7305868.html
-Advertisement-
Play Games

騰訊發佈 Omix 1.0 用 JSX 或 hyperscript 創建用戶界面 今天,騰訊正式開源發佈 Omix 1.0, 讓開發者使用 JSX 或 hyperscript 創建用戶界面。 "Github" 功能特性 超級快的速度, "點擊這裡體驗一下" 超小的尺寸, 7 KB (gzip) 良好 ...


騰訊發佈 Omix 1.0 - 用 JSX 或 hyperscript 創建用戶界面

http://images2017.cnblogs.com/blog/105416/201708/105416-20170807145434955-1872305404.png

今天,騰訊正式開源發佈 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 class="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.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CSS中有很多功能強大的方法,其中過渡屬性transition就很牛叉。你不用寫一行JavaScript代碼,隨便寫點css就可以實現一個動畫效果。下麵結合我在W3C網站上看到的實例,舉個慄子說明下(⊙o⊙)… 滑鼠碰我(*^__^*) 上面是一個過渡動畫的demo,效果是不是很帥啊! 額,跑題了( ...
  • stop()函數直接停止動畫,finish()也會停止動畫同時所有排隊的動畫的CSS屬性跳轉到他們的最終值。 示例代碼: 說明: 示例中stop()函數沒有停止動畫,為什麼? ...
  • HTML5新增屬性data 書寫實例 1. 定義: data 屬性用於存儲頁面或應用程式的私有自定義數據。 data 屬性賦予我們在所有 HTML 元素上嵌入自定義 data 屬性的能力。 2. 註意點: data 屬性包括兩部分: 屬性名不應該包含任何大寫字母,並且在首碼 "data " 之後必須 ...
  • 寫這篇博客的目的是讓廣大的學者在初入Vue項目的時候少走些彎路,雖然現在有很多博客也有差不多的內容,但是博主在裡面添加了一些學習時碰到的小問題。在閱讀這篇博客之前,我先給大家推薦一篇文章《入門Webpack,看這篇就夠了》(網址:http://www.jianshu.com/p/42e11515c1 ...
  • 首先,我們通過ajax請求,向後臺傳遞參數,然後後臺經過一系列的運算之後向前臺返還數據,我希望在等待數據成功返還之前可以展示一個loading.gif圖 不廢話,在頁面上執行點擊事件(<a sceneid="@scene.ID" href="javascript:void(0)" onclick=" ...
  • select 獲取select下的所有option 用op=select.options option屬性:op[1].value,op[1].text; //獲取選中項的索引 os.selectedIndex; //獲取當前選中項 select.options[os.selectedIndex]; ...
  • 解構通俗點說,就是通過一種特定格式,快捷的讀取對象/數組中的數據的方法, es6之前,我們通過對象名稱[鍵] 讀取數據 上面第5行就是一個簡單的數據解構過程: 1,右邊如果是對象,左邊解構的語法也要用對象格式, 如果解構的數據是數組,左邊就用數組格式 2,name, age是局部變數 3,解構出來的 ...
  • 主題:創建對象 原型模式 JavaScript中的每個對象都有一個prototype屬性(原型屬性),這個屬性是一個指針,指向一個對象,而這個對象可以由一些屬性和方法組成。被指向的對象,可以是多個對象的原型,這樣創建的對象就共用了一個原型對象。 這裡可提煉一下,用更簡潔的方式實現。但需要註意cont ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...