Rax 是由阿里巴巴淘系技術部提供的超輕量,高性能,易上手的前端解決方案。它的特色之一就是可以一次開發多端運行,這樣一來能夠解放重複工做,讓開發者更注重產品邏輯,提高開發效率。css
Rax 在設計上抽象出 Driver 的概念,用來支持在不一樣容器中渲染,好比目前所支持的:Web, Weex, Node.js 。基於 Driver 的概念,將來即便出現更多的容器(如 VR 等),Rax 也能夠從容應對。此外,Rax 經過一套基於 AST 的解決方案支持構建小程序應用。Rax 在設計上儘可能抹平各個端的差別性,這也使得開發者在差別性和兼容性方面不再須要投入太多精力了。前端
雙十一要來了,老闆給了小白一個任務——寫一個賣書的電商應用,要求是能同時投放到 Web 和支付寶小程序, 而且明天就要提測。小白接到任務瑟瑟發抖,在調研一番以後,他選擇了 Rax。對 Rax 感興趣的同窗,能夠經過下面這份小白的總結來了解一下,他是怎麼一天完成這個艱鉅的任務的。web
小白看了看文檔,發現根本無需本地全局安裝腳手架就能夠初始化項目:npm
npm init rax book-store複製代碼
在不加思索的選擇了建立多端工程以後,小白看到了下面的提示:json
? Do you want to build to these targets? (Press <space> to select, <a> to toggle all, <i> to invert selectio
n)
❯◯ web
◯ weex
◯ miniapp複製代碼
「簡直太適合我了吧!!!」小白激動的叫出了聲。小程序
項目目錄以下:後端
├── README.md
├── build.json
├── package.json
├── src
│ ├── app.js
│ ├── app.json
│ ├── components
│ │ └── Logo
│ │ ├── index.css
│ │ └── index.jsx
│ ├── document
│ │ └── index.jsx
│ └── pages
│ └── Home
│ ├── index.css
│ └── index.jsx
└── yarn.lock複製代碼
小白試着在命令行輸入了:瀏覽器
npm start複製代碼
點開命令行提示的 ip,小白髮現 Web 端正常的跑起來了。再看看 build 目錄的文件結構:bash
└── miniapp
├── app.acss
├── app.js
├── app.json
├── components
│ └── Logo
│ ├── index.axml
│ ├── index.css.js
│ ├── index.js
│ └── index.json
└── pages
└── Home
├── index.axml
├── index.css.js
├── index.js
└── index.json複製代碼
一目瞭然,miniapp 下面是標準的小程序代碼結構,打開支付寶小程序開發者工具,把小程序目錄指向 miniapp:微信
首頁是一個滾動加載的書單列表,小白按照熟悉的 JSX 語法,立刻就寫出了基礎佈局,甚至還用上了 React 16.8 以後推出的 hooks 語法:
import { createElement, useState } from 'rax'; import ScrollView from 'rax-scrollview'; import BookItem from '../../components/BookItem'; import mockData from '../../mock'; import './index.css'; export default function Home() { const [bookList, setBookList] = useState(mockData); return ( <ScrollView className="book-list"> {bookList.map(item => { return <BookItem detail={item} />; })} </ScrollView> ); }複製代碼
對熟悉 React 的小白來講,首頁寫起來簡直不費吹灰之力,語法簡單明瞭,結構很是清晰。
在完成首頁開發以後,小白開始動手開發 BookItem
組件,每個 BookItem
組件用來展現不一樣書的信息,供消費者進行選擇:
import { createElement } from 'rax'; import View from 'rax-view'; import Image from 'rax-image'; import Text from 'rax-text'; import './index.css'; export default function({ detail }) { return ( <View className="book-container"> <Image mode="aspectFit" className="book-img" source={{ uri: detail.imgUri }} /> <View className="book-info"> <Text className="title">{detail.title}</Text> <Text className="money">¥{detail.money}</Text> </View> </View> ); }複製代碼
小白寫完上面這些代碼,看了看時間,才過了 5 分鐘,他分別打開瀏覽器和開發者工具,看看效果如何:
瀏覽器:
小程序開發者工具:
頁面基本已經完成,還剩下接入數據請求、下拉加載更多、跳轉等功能。
整個項目作下來,小白髮現一天的時間綽綽有餘,更多的時間是花在調整樣式和後端聯調上,開發過程也很是溫馨,可使用熟悉的 React 語法同時開發多個端的項目,幾乎不用再去學習小程序的語法。
Rax 爲了可以知足開發者一次代碼無感跑多端的訴求,提供了多端工程體系、Rax 基礎組件、Universal-API 等等生態。開發者可使用社區中最受歡迎的 React 語法,迅速經過 Rax 完成本身的項目。另外,更加吸引人的是,這些多端項目不只僅只是完成而已,它們的性能、包體積表現都很是出色。
用 Rax 開發小程序是否是真的沒有阻礙呢?答案是否認的,小白髮現,因爲 Rax 轉譯小程序是經過 AST 的方式編譯實現的,因此依然有一些經常使用的語法沒法知足,例如一個文件只能導出一個組件、沒法把 JSX 賦值給變量,而後經過變量去渲染等等。可是好在,這些用法都能用簡單的方法繞過。
Rax 團隊的願景是——Write once, run everywhere。由於相信,因此看見。將來,Rax 會在更多端上進行探索好比 VR/AR、Iot。小程序鏈路是其中重要的一環,咱們期待可以用 Rax 更加自如的完成小程序項目,而且支持更多類型的平臺,好比微信、今日頭條等等。
看了這篇簡單實戰以後,你也能夠動手試試看。用 Rax 高效的開發小程序,這種感受真的很爽~