[๐ง Work In Progress v1.0] The fastest way to build cross-container application.
Community
โก Fast: blazing fast virtual DOM.
๐ฏ Tiny: 12.6 KB minified + gzipped.
๐จ Universal: works in browsers, Weex, Node.js, Mini-program, WebGL and could works more container that implement driver specification.
Install the Rax CLI tools to init project:
$ npm install rax-cli -g
$ rax init <YourProjectName>
Start local server to launch project:
$ cd YourProjectName
$ npm run start
- WebApp Project
- MiniApp Project
.
โโโ package.json
โโโ .gitignore
โโโ .eslintrc.js
โโโ src
โ โโโ index.js
โโโ public
โโโ index.html
.
โโโ app.acss
โโโ app.js
โโโ app.json
โโโ package.json
โโโ .gitignore
โโโ .eslintrc.js
โโโ pages
โโโ page1
โ โโโ page1.acss
โ โโโ page1.axml
โ โโโ page1.js
โ โโโ page1.json
โโโ page2
โโโ page2.acss
โโโ page2.axml
โโโ page2.js
โโโ page2.json
- JSX(XML-like syntax extension to ECMAScript) DSL
- SFC(Single File Component) DSL
- MP(Mini Program) DSL
Each JSX element is just syntactic sugar for calling
createElement(component, props, ...children)
. So, anything you can do with JSX can also be done with just plain JavaScript.
// Hello.jsx
import {createElement, Component} from 'rax';
export default class extends Component {
state = {
name: 'world'
};
onChange = ()=>{
this.setState({
name: 'rax'
});
};
render() {
return (
<view style={styles.hello}>
<text style={styles.title} onClick={this.onChange}>
Hello {this.state.name}
</text>
</view>
);
}
}
const styles = {
hello: {
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center'
},
title: {
fontSize: '40px',
textAlign: 'center'
}
};
// app.js
import {render} from 'rax';
import Hello from './Hello';
render(<Hello name="world" />);
SFC is a Vue-like DSL that will compile to rax component.
<!-- hello.html -->
<template>
<view class="hello">
<text class="title" @click="change">Hello {{name}}</text>
</view>
</template>
<script>
export default {
data: function () {
return {
name: 'world'
}
},
methods: {
change () {
this.name = 'rax';
}
}
}
</script>
<style>
.hello {
flex-direction: column;
justify-content: center;
align-items: center;
}
.title {
font-size: 40px;
text-align: center;
}
</style>
// app.js
import {render} from 'rax';
import Hello from './hello';
render(<Hello name="world" />);
MP DSL will compile to rax component.
Component({
data: {
name: 'world'
},
methods: {
onChange(e) {
this.setData({
name: 'rax'
});
}
}
});
/* index.acss */
.hello {
flex-direction: column;
justify-content: center;
align-items: center;
}
.title {
font-size: 40px;
text-align: center;
}
<!-- index.axml -->
<view class="hello">
<text class="title" onClick="change">Hello {{name}}</text>
</view>
- ๐ฅ rax-test-renderer: Rax renderer for snapshot testing.
- ๐ป rax-server-renderer: Rax renderer for server-side render.
- React Developer Tools: Allow you inspect and modify the state of your Rax components at runtime in Chrome Developer Tools.
- Redux DevTools extension: Provide power-ups for your Redux development workflow.
- Use the
rax-redux
module in your app - Simply replace code follow the Redux DevTools extension usage doc
- Use the
Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing.
After cloning rax, run npm install
to fetch its dependencies.
Run npm run setup
link and bootstrap project before development.
Then, you can run several commands:
npm run lint
checks the code style.npm test
runs the complete test suite.npm test -- --watch
runs an interactive test watcher.npm test <pattern>
runs tests with matching filenames.npm run build
createslib
anddist
folder with all the packages.npm start
start local server withexamples
folder.
![]() @yuanyan Core |
![]() @imsobear Development |
![]() @yacheng Universals & Components |
![]() @boiawang Loaders & Plugins |
![]() @wssgcg1213 DSL Runtimes & Loaders |