🐰 Rax is a progressive React framework for building universal application. https://rax.js.org

Overview

Rax

Rax is a progressive React framework for building universal applications.

gzip size


💌 Write Once, Run Anywhere: write one codebase, run with Web, Weex, Node.js, Alibaba MiniApp, WeChat MiniProgram and could work with more container that implements driver specification.

Fast: use better performance and tinier size( 📦 ~6KB) alternative to React with the same API.

📤 Easy: quick start with zero configuration, all features like Progressive Web App (PWA), Server-Side Rendering (SSR) and Function as a service (FaaS) can be used out of the box.

Quick Start 🥢 🍚

Start from command line

Create a new Rax project using create-rax:

$ npm init rax <YourProjectName>

npm init <initializer> is available in npm 6+

Start local server to launch project:

$ cd <YourProjectName>
$ npm install
$ npm run start

Start from VS Code

You need to install the Iceworks extension and invoke the Iceworks: Create Application command from the VS Code command palette (Ctrl + Shift + P or Cmd + Shift + P on Mac):

vscode

Developer Tools 🛠

You can inspect and modify the state of your Rax components at runtime using the Rax Developer Tools browser extension, and extension not works in production mode.

  1. Install the Chrome Rax Developer Tools extension
  2. Reload and go to the 'Rax' tab in the browser's development tools

VS Code Extension

You can use Iceworks VS Code Extension to get better development experience.

Awesome Things 📝

You can find some awesome things in awesome-rax.

Contributing 🧼

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing.

Code Contributors

This project exists thanks to all the people who contribute.

Community support

For general help using Rax, please refer to the official site. For additional help, you can use one of these channels to ask a question:

  • GitHub (Bug reports, contributions)
  • Twitter (Get the news fast)
  • Medium (Get blogs and articles)
  • 知乎专栏 (Get blogs and articles in Simplified Chinese)
Comments
  • [Question]如何正确使用@unocss/webpack

    [Question]如何正确使用@unocss/webpack

    背景

    • https://github.com/unocss/unocss/blob/main/packages/webpack/README.md
    {
      "targets": ["web"],
      "webpack5": true,
      "webpackPlugins": {
        "@unocss/webpack": {}
      }
    }
    
    

    报错

    ERR! CONFIG Failed to load webpack config.
    ERR! Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
     - configuration[0].plugins[8] misses the property 'apply'. Should be:
       function
       -> The run point of the plugin, required method.
    ValidationError: Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
     - configuration[0].plugins[8] misses the property 'apply'. Should be:
       function
       -> The run point of the plugin, required method.
        at validate (.pnpm/@[email protected]/node_modules/@builder/pack/deps/schema-utils3/index.js:1:153657)
        at validateSchema (.pnpm/@[email protected]/node_modules/@builder/pack/deps/webpack/bundle5.js:151268:2)
        at create (.pnpm/@[email protected]/node_modules/@builder/pack/deps/webpack/bundle5.js:154748:24)
        at webpack (.pnpm/@[email protected]/node_modules/@builder/pack/deps/webpack/bundle5.js:154795:32)
        at f (.pnpm/@[email protected]/node_modules/@builder/pack/deps/webpack/bundle5.js:109940:16)
        at .pnpm/[email protected]/node_modules/build-scripts/lib/service/start.js:56:24
        at Generator.next (<anonymous>)
        at fulfilled (.pnpm/[email protected]/node_modules/build-scripts/lib/service/start.js:5:58)
        at processTicksAndRejections (internal/process/task_queues.js:95:5) {
      errors: [
        {
          keyword: 'anyOf',
          dataPath: '[0].plugins[8]',
          schemaPath: '#/items/anyOf',
          params: {},
          message: 'should match some schema in anyOf',
          schema: [Array],
          parentSchema: [Object],
          data: [Object],
          children: [Array]
        }
      ],
      schema: {
        definitions: {
          Amd: [Object],
          AssetFilterItemTypes: [Object],
          AssetFilterTypes: [Object],
          AssetGeneratorDataUrl: [Object],
          AssetGeneratorDataUrlFunction: [Object],
          AssetGeneratorDataUrlOptions: [Object],
          AssetGeneratorOptions: [Object],
          AssetInlineGeneratorOptions: [Object],
          AssetModuleFilename: [Object],
          AssetParserDataUrlFunction: [Object],
          AssetParserDataUrlOptions: [Object],
          AssetParserOptions: [Object],
          AssetResourceGeneratorOptions: [Object],
          AuxiliaryComment: [Object],
          Bail: [Object],
          CacheOptions: [Object],
          CacheOptionsNormalized: [Object],
          Charset: [Object],
          ChunkFilename: [Object],
          ChunkFormat: [Object],
          ChunkLoadTimeout: [Object],
          ChunkLoading: [Object],
          ChunkLoadingGlobal: [Object],
          ChunkLoadingType: [Object],
          Clean: [Object],
          CleanOptions: [Object],
          CompareBeforeEmit: [Object],
          Context: [Object],
          CrossOriginLoading: [Object],
          Dependencies: [Object],
          DevServer: [Object],
          DevTool: [Object],
          DevtoolFallbackModuleFilenameTemplate: [Object],
          DevtoolModuleFilenameTemplate: [Object],
          DevtoolNamespace: [Object],
          EmptyGeneratorOptions: [Object],
          EmptyParserOptions: [Object],
          EnabledChunkLoadingTypes: [Object],
          EnabledLibraryTypes: [Object],
          EnabledWasmLoadingTypes: [Object],
          Entry: [Object],
          EntryDescription: [Object],
          EntryDescriptionNormalized: [Object],
          EntryDynamic: [Object],
          EntryDynamicNormalized: [Object],
          EntryFilename: [Object],
          EntryItem: [Object],
          EntryNormalized: [Object],
          EntryObject: [Object],
          EntryRuntime: [Object],
          EntryStatic: [Object],
          EntryStaticNormalized: [Object],
          EntryUnnamed: [Object],
          Environment: [Object],
          Experiments: [Object],
          ExperimentsCommon: [Object],
          ExperimentsNormalized: [Object],
          ExternalItem: [Object],
          ExternalItemFunctionData: [Object],
          ExternalItemValue: [Object],
          Externals: [Object],
          ExternalsPresets: [Object],
          ExternalsType: [Object],
          FileCacheOptions: [Object],
          Filename: [Object],
          FilenameTemplate: [Object],
          FilterItemTypes: [Object],
          FilterTypes: [Object],
          GeneratorOptionsByModuleType: [Object],
          GlobalObject: [Object],
          HashDigest: [Object],
          HashDigestLength: [Object],
          HashFunction: [Object],
          HashSalt: [Object],
          HotUpdateChunkFilename: [Object],
          HotUpdateGlobal: [Object],
          HotUpdateMainFilename: [Object],
          HttpUriAllowedUris: [Object],
          HttpUriOptions: [Object],
          HttpUriOptionsAllowedUris: [Object],
          IgnoreWarnings: [Object],
          IgnoreWarningsNormalized: [Object],
          Iife: [Object],
          ImportFunctionName: [Object],
          ImportMetaName: [Object],
          InfrastructureLogging: [Object],
          JavascriptParserOptions: [Object],
          Layer: [Object],
          LazyCompilationDefaultBackendOptions: [Object],
          LazyCompilationOptions: [Object],
          Library: [Object],
          LibraryCustomUmdCommentObject: [Object],
          LibraryCustomUmdObject: [Object],
          LibraryExport: [Object],
          LibraryName: [Object],
          LibraryOptions: [Object],
          LibraryType: [Object],
          Loader: [Object],
          MemoryCacheOptions: [Object],
          Mode: [Object],
          ModuleFilterItemTypes: [Object],
          ModuleFilterTypes: [Object],
          ModuleOptions: [Object],
          ModuleOptionsNormalized: [Object],
          Name: [Object],
          NoParse: [Object],
          Node: [Object],
          NodeOptions: [Object],
          Optimization: [Object],
          OptimizationRuntimeChunk: [Object],
          OptimizationRuntimeChunkNormalized: [Object],
          OptimizationSplitChunksCacheGroup: [Object],
          OptimizationSplitChunksGetCacheGroups: [Object],
          OptimizationSplitChunksOptions: [Object],
          OptimizationSplitChunksSizes: [Object],
          Output: [Object],
          OutputModule: [Object],
          OutputNormalized: [Object],
          Parallelism: [Object],
          ParserOptionsByModuleType: [Object],
          Path: [Object],
          Pathinfo: [Object],
          Performance: [Object],
          PerformanceOptions: [Object],
          Plugins: [Object],
          Profile: [Object],
          PublicPath: [Object],
          RawPublicPath: [Object],
          RecordsInputPath: [Object],
          RecordsOutputPath: [Object],
          RecordsPath: [Object],
          Resolve: [Object],
          ResolveAlias: [Object],
          ResolveLoader: [Object],
          ResolveOptions: [Object],
          ResolvePluginInstance: [Object],
          RuleSetCondition: [Object],
          RuleSetConditionAbsolute: [Object],
          RuleSetConditionOrConditions: [Object],
          RuleSetConditionOrConditionsAbsolute: [Object],
          RuleSetConditions: [Object],
          RuleSetConditionsAbsolute: [Object],
          RuleSetLoader: [Object],
          RuleSetLoaderOptions: [Object],
          RuleSetLogicalConditions: [Object],
          RuleSetLogicalConditionsAbsolute: [Object],
          RuleSetRule: [Object],
          RuleSetRules: [Object],
          RuleSetUse: [Object],
          RuleSetUseItem: [Object],
          ScriptType: [Object],
          SnapshotOptions: [Object],
          SourceMapFilename: [Object],
          SourcePrefix: [Object],
          StatsOptions: [Object],
          StatsValue: [Object],
          StrictModuleErrorHandling: [Object],
          StrictModuleExceptionHandling: [Object],
          Target: [Object],
          TrustedTypes: [Object],
          UmdNamedDefine: [Object],
          UniqueName: [Object],
          WarningFilterItemTypes: [Object],
          WarningFilterTypes: [Object],
          WasmLoading: [Object],
          WasmLoadingType: [Object],
          Watch: [Object],
          WatchOptions: [Object],
          WebassemblyModuleFilename: [Object],
          WebpackOptionsNormalized: [Object],
          WebpackPluginFunction: [Object],
          WebpackPluginInstance: [Object]
        },
        title: 'WebpackOptions',
        description: 'Options object as provided by the user.',
        type: 'object',
        additionalProperties: false,
        properties: {
          amd: [Object],
          bail: [Object],
          cache: [Object],
          context: [Object],
          dependencies: [Object],
          devServer: [Object],
          devtool: [Object],
          entry: [Object],
          experiments: [Object],
          externals: [Object],
          externalsPresets: [Object],
          externalsType: [Object],
          ignoreWarnings: [Object],
          infrastructureLogging: [Object],
          loader: [Object],
          mode: [Object],
          module: [Object],
          name: [Object],
          node: [Object],
          optimization: [Object],
          output: [Object],
          parallelism: [Object],
          performance: [Object],
          plugins: [Object],
          profile: [Object],
          recordsInputPath: [Object],
          recordsOutputPath: [Object],
          recordsPath: [Object],
          resolve: [Object],
          resolveLoader: [Object],
          snapshot: [Object],
          stats: [Object],
          target: [Object],
          watch: [Object],
          watchOptions: [Object]
        }
      },
      headerName: 'Webpack',
      baseDataPath: 'configuration',
      postFormatter: [Function: postFormatter]
    }
    
    opened by xmsz 22
  • [Hooks] Uncaught TypeError: current is not a function

    [Hooks] Uncaught TypeError: current is not a function

    1. How would you tag this issue?
    • Bug
    1. Describe your issue:
    import { createElement, useEffect, useState } from 'rax';
    
    export default () => {
        const [visible, setVisible] = useState(false);
    
        useEffect(async () => {
            let a = await new Promise((resolve) => {
                setTimeout(() => {
                    resolve(11);
                });
            });
            console.log(a);
        });
    
        let element = (
            <div>
                <button onClick={() => setVisible(true)}>update</button>
            </div>
        );
    
        return element;
    }
    

    If I click the update button, Rax will throw the error below: image image

    Bug 
    opened by andycall 22
  • [Question]微信onShareTimeline 分享朋友圈,title跟 imageUrl不生效

    [Question]微信onShareTimeline 分享朋友圈,title跟 imageUrl不生效

    分享给朋友是可以的。但是分享朋友圈不生效。不知道什么原因。

      // query: 自定义页面路径中携带的参数,如 path?a=1&b=2 的 “?” 后面部分
      const handleShareTimeline = () => {
        return {
          title: '我是自定义title',   // 不生效, 分享后是页面的title而不是自定义title
          query: `key=123`,
          imageUrl: 'https://xxxx.png',  // 不生效, 看到的是logo
        }
      };
    
      if (isWeChatMiniProgram) {
        registerNativeEventListeners(Index, ['onShareTimeline']);
      }
    
      useEffect(() => {
        if (isWeChatMiniProgram) {
          wx.showShareMenu({
            withShareTicket: true,
            menus: ['shareTimeline'],
          });
          addNativeEventListener('onShareTimeline', handleShareTimeline);
        }
        return () => {
          if (isWeChatMiniProgram) {
            removeNativeEventListener('onShareTimeline', handleShareTimeline);
          }
        };
      }, []);
    
    opened by waylon-gmail 12
  • [BUG] [微信小程序] - style 不支持 WebkitLineClamp 或者 -webkit-line-clamp

    [BUG] [微信小程序] - style 不支持 WebkitLineClamp 或者 -webkit-line-clamp

    代码:

    <view style={{
          '-webkit-box-orient': 'vertical',
          '-webkit-line-clamp': 2,
          color: 'blue',
        }}>
    

    渲染成小程序代码以后,可以发现 -webkit-line-clamp 丢失

    Bug 
    opened by Rabbitzzc 12
  • [Question]路由使用browser,二级目录部署,需要publicPath,设置后发现一些问题。

    [Question]路由使用browser,二级目录部署,需要publicPath,设置后发现一些问题。

    "publicPath": "/webapp/"

    1. Link组件需要web开发加上publicPath, 小程序不能加;
    2. Navigator组件需要web开发加上publicPath(使用history不需要开发拼), 小程序不能加;
    3. tabbar的image在public文件夹下会识别不到image,如果加上 publicPath就会影响小程序。
    4. 请问代码中如何获取publicPath
    Question 
    opened by waylon-gmail 12
  • npm run start后报错,求解决

    npm run start后报错,求解决

    webpack: building modules...(node:48859) DeprecationWarning: Tapable.apply is deprecated. Call apply on the plugin directly instead (node:48859) DeprecationWarning: Tapable.plugin is deprecated. Use new API on .hooks instead webpack: building modules.../Users/edward/study/testrax/demo/node_modules/neo-async/async.js:14 throw new Error('Callback was already called.'); ^

    Error: Callback was already called. at throwError (/Users/edward/study/testrax/demo/node_modules/neo-async/async.js:14:11) at /Users/edward/study/testrax/demo/node_modules/neo-async/async.js:2760:7 at Compilation.processModuleDependencies (/Users/edward/study/testrax/demo/node_modules/webpack/lib/Compilation.js:435:4) at afterBuild (/Users/edward/study/testrax/demo/node_modules/webpack/lib/Compilation.js:560:16) at _this.buildModule.err (/Users/edward/study/testrax/demo/node_modules/webpack/lib/Compilation.js:606:11) at callback (/Users/edward/study/testrax/demo/node_modules/webpack/lib/Compilation.js:357:35) at module.build.error (/Users/edward/study/testrax/demo/node_modules/webpack/lib/Compilation.js:393:12) at handleParseError (/Users/edward/study/testrax/demo/node_modules/webpack/lib/NormalModule.js:364:12) at doBuild.err (/Users/edward/study/testrax/demo/node_modules/webpack/lib/NormalModule.js:394:5) at runLoaders (/Users/edward/study/testrax/demo/node_modules/webpack/lib/NormalModule.js:270:12) at /Users/edward/study/testrax/demo/node_modules/loader-runner/lib/LoaderRunner.js:370:3 at iterateNormalLoaders (/Users/edward/study/testrax/demo/node_modules/loader-runner/lib/LoaderRunner.js:211:10) at Array. (/Users/edward/study/testrax/demo/node_modules/loader-runner/lib/LoaderRunner.js:202:4) at Storage.finished (/Users/edward/study/testrax/demo/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:43:16) at provider (/Users/edward/study/testrax/demo/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:79:9) at /Users/edward/study/testrax/demo/node_modules/graceful-fs/graceful-fs.js:78:16 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] start: rax-scripts start npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    opened by vdiskmobile 12
  • 在weex中使用rax是否可以引用本地ttf字体图标

    在weex中使用rax是否可以引用本地ttf字体图标

    使用rax比使用we要舒服,但都有同一个问题,似乎不能引用本地资源。 我想使用字体图标 <Icon fontFamily="iconfont" source={{uri: 'https://at.alicdn.com/t/font_pkm0oq8is8fo5hfr.ttf', codePoint: '\uE60f'}}/> 这样,如果客户端无网络,图标就无法显示出来,现在是否有解决办法? 我尝试local://drawable/aaa这样算是可以使用本地图片了,但ttf不行。 还有在windows下 npm run build 不能编译,只能在linux下编译目前

    opened by bishen 12
  • [Question]rax-slider高度如何设置成屏幕高度

    [Question]rax-slider高度如何设置成屏幕高度

    背景

    • 我需要一个全屏的rax-slider
    • 我设置高度'100vh' => 无效
    • 我设置高度'100%' => 无效
    • 我设置高度'window.screen.height' => 不符合
    • 我设置高度'window.screen.height * window.pixelRadio' => 只有iphone6符合
    • 我设置高度'window.screen.height * 2 => 真机不符合

    需求

    • 可以设置100%
    • 可以设置100vh
    • 或者其他办法解决需求
    Question 
    opened by xmsz 11
  • [Question]appConfig getInitialData 小程序不会触发,web每个页面都会触发,请问是设计如此吗?

    [Question]appConfig getInitialData 小程序不会触发,web每个页面都会触发,请问是设计如此吗?

    image

    const appConfig = { app: { getInitialData: async () => { const restUserRes = await queryCurrentUser(); return { initialStates: {user: { currentUser: restUserRes } }}; }, }, }

    Question 
    opened by waylon-gmail 11
  • Feature/theme support

    Feature/theme support

    支持主题:https://github.com/xcodebuild/rax/tree/feature/theme-support/packages/stylesheet-loader#theme-support

    背景

    部分场景需要满足运行时更换主题(例如支持 darkmode)和覆盖组件部分样式的功能

    主题

    基于现有方案的基础上,允许在 CSS 中使用 var()

    .text {
      color: var(--color-error-1);
    }
    

    在 JSX 中使用:

    <View>
      <Text className="text">other</Text>
    </View>
    

    或者

    import styles from './index.css';
    
    <View>
      <Text style={styles.text}>other</Text>
    </View>
    

    在 JS 中动态设置主题:

    import themeHelper from 'rax-theme-helper';
    
    const origin = themeHelper.get();
    
    themeHelper.set({
      ...origin,
      theme: {
        ...origin.theme,
        '--color-error-1': 'red'
      }
    })
    

    默认会提供一套基础的主题 key-value,来自于 @rax-ui/core,列表见:https://cdn.jsdelivr.net/npm/@rax-ui/[email protected]/lib/index.d.ts

    新增选项

    由于主题支持会带来运行时依赖(rax-theme-helper),所以默认不开启,需要开启 babel-plugin-transform-jsx-stylesheetstylesheet-loader 的配置

    { theme: true }
    
    opened by xcodebuild 10
  • How does Rax compare to Preact?

    How does Rax compare to Preact?

    Help us to manage our issues by answering the following:

    1. How would you tag this issue?
    • [x] Question
    1. Describe your issue: I'd be interested in a comparison with Preact
    opened by flosse 10
  • 微信刚出的bind:chooseavatar事件用Rax如何写事件名?

    微信刚出的bind:chooseavatar事件用Rax如何写事件名?

    用onChooseavatar写事件好像失效。

    需要支持微信小程序 open-type 头像获取:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html 支持chooseAvatar回调

    opened by dong-lufei 0
  • [Question]如何自定义 Kraken 中的切换导航页的目标地址?

    [Question]如何自定义 Kraken 中的切换导航页的目标地址?

    Please describe the problem you meet.

    在 Kraken 中切换导航页的行为和 Web 版一致,会试图跳转到某个特定 html 页面,如 /home.html,但是在 Kraken 中并不存在这样的页面,而是一个个的 kbc1 包,因此跳转会失败。

    解决方法有两个:

    1. 在 Rax 端找机会重写跳转目标。对于显式的跳转按钮实现,我们可以封装一个自有的 navigateTo 函数,判断是 isKraken 就将传入的 path 转换为 https://xxx/kraken/.kbc1 这样的目标(实践证明可行)。但是导航栏的点击跳转不知道怎么重载;
    2. 在 Kraken 端劫持 navigation 操作,将收到的类似 /home.html 的跳转请求重写为如上的 kbc1 目标。但是 Kraken/WebF 不支持重载 navigation 操作(包含 handleNavigationAction 方法的 KrakenViewController 是一个内部类无法触达),可传入的 KrakenNavigationDelegate 只能选择是否停止跳转(disallow),而无法改变跳转目标;

    上面两条路看起来都不通。不知道是否还有没有其他解决方法?

    opened by hughlv 6
Releases(v1.2.2)
  • v1.2.2(Sep 2, 2021)

  • v1.2.1(Sep 1, 2021)

  • v1.2.0(Feb 5, 2021)

  • v1.1.4(Jul 15, 2020)

  • v1.1.3(May 26, 2020)

    • fix: fragment cache native node #1867
    • fix: portal with new context #1866
    • fix: unmount dirty component #1865
    • fix: destory function of a passive effect should call synchronously #1864
    • fix: render returns null to null empty nodes are also rebuilt #1842
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Nov 19, 2019)

    • Fix: driver dom rpx (#1406)
    • Feat: upgrade style-unit support to driver-worker (#1411)
    • Fix: error boundary bug and remove useless code (#1414)
    • Feat: promote init speed (#1449)
    • Feat: support props check (#1444)
    • Feat: pwa support keepAlive & TabBar & preload and prerender (#1452)
    • Fix: update exception when rise a element type error (#1455)
    • Fix: support dimensional prop value without px (#1456)
    • Chore: freeze props (#1463)
    • Feat: do not break render when element type invalid (#1468)
    • Fix: prevent the same reference (#1470)
    • Fix: support dimensional prop value without px (#1467)
    • Feat: add useInterval and useTimeout (#1462)
    • Chore: rax-redux upgrade to latest (#1439)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.13(Nov 19, 2019)

    v1.0.13

    • Feat: rax-use-router support withRouter (#1385)
    • Fix: componentDidMount exec correct (#1399)

    v1.0.12

    • print warning when loop elements without key property (#1355)
    • context not work correct in async render mode (#1378)
    • Update rax project entry file app.js usage. (#1343)
    • minify the wrapper code generated by rollup (#1374)
    • when prev fragment is empty and update to other type (#1365)
    • compress _hooks (#1369)
    • mobx-rax support rax1.x (#1368)
    • fragment test case (#1363)
    • Only prevNativeNode is empty fragment should find the prevSlibingNativeNode (#1361)
    • add toWarnDev and toLowPriorityWarnDev jest matcher (#1354)

    v1.0.11

    • compress isPureComponent (#1358)
    • Key should not be compressed, for that will be added to native n… (#1356)

    v1.0.10

    • little opt (#1351)
    • empty array diff error (#1346)
    • Revert "fix: optimize performance and reduce package size" (#1352)
    • use for loop instead of while to avoid mutate array iteself (#1348)
    • change log logic inversion (#1329)
    • driver-universal support CSS custom properties (#1335)
    • Optimize performance (#1333)
    • Refactor compress variables (#1332)
    • optimize performance and reduce package size (#1331)
    • Refactor core performance and size (#1300)
    • Apply some performance optimisation (#1330)
    • migrate scripts packages (#1325)
    • fix ssr style (#1324)
    • add rax-plugin-pwa (#1307)
    • Support component use separated css file (#1303)

    v1.0.9

    • v1.0.9 and update readme (#1320)
    • rax-scripts (#1299)
    • tansform jsx to html (#1304)
    • Optimize scheduler size and performance (#1309)
    • prop style array to Object.assign (#1313)
    • remove useless packages (#1305)
    • raxjs supports iife and cjs, pulling away from amd. (#1286)
    • plugin app add hash config (#1292)
    • Transfer miniapp related packages (#1294)
    • Add rax-set-native-props & rax-get-element-by-id (#1296)
    • transfer miniapp related packages to internal (#1290)
    • Multi pages support routeName (#1289)
    • add rpx2vw (#1283)
    • Fix ssr multi (#1275)
    • rax-engineering (#1239)
    • Feat enhance component plugin (#1235)
    • Feat mpa plugin (#1260)
    • Feat user config (#1253)
    • improve performance with clearing all children (#1254)
    • Feat fix minimize (#1238)
    • Refactor new context (#1184)
    • Feat common config (#1233)
    • Fix inline style (#1228)
    • improve driver dom performance for rpx (#1223)
    • fix change mp build dir (#1217)
    • add qrcode (#1215)
    • remove web-app index.html font-size (#1214)
    • rax 1.0 engineering (#1180)
    • Fix engineer error (#1213)
    • Feat optimize app template (#1210)
    • support cli api (#1209)
    • Merge remote-tracking branch 'origin/feat-rax-engineering' into feat-optimize-app-template (#1187)
    • Feat: update App Shell plugin (#1206)
    • revert: external rax (#1207)
    • Merge remote-tracking branch 'origin/feat-rax-engineering' into feat-add-mpapp (#1208)
    • fix document plugin public (#1202)
    • fix weex external (#1204)
    • add SSR client router initialComponent (#1200)
    • fix-com&api-config (#1199)
    • fix publicPath (#1198)
    • add ssr plugin client (#1196)
    • Feat app plugin update (#1195)
    • generate package.json (#1194)
    • add pwa (#1188)
    • The fix isValidElement method returns a Boolean value (#1191)
    • add api plugin (#1190)
    • add application template (#1189)
    • add universal API template (#1185)
    • Feat new initialization workflow (#1183)
    • version patch babel-plugin-transform-jsx-stylesheet (#1175)
    • Feat/universal app runtime (#1179)
    • Refactor/universal app shell loader (#1181)
    • fix: match search is not needed (#1166)
    • add dont remove className option (#1171)
    • Fix repeat packing rax in production mode when compat react (#1172)
    • Update event-handle.md (#1170)

    v1.0.8

    • Migration project deletion (#1143)
    • rax-scripts component-miniapp bug (#1164)
    • proxy for ssr dev server (#1137)
    • typo fix in docs (#1150)
    • rax scripts add postcss-plugin-rpx2vw (#1146)
    • Rax PWA (#1097)

    v1.0.7

    • react compatibility (#1116)
    • Feat create rax (#1114)
    • Remove weex generator and update readme (#1111)
    • Universal app (#1102)
    • improve creating & removing performace (#1089)
    • weixin mp props (#1080)
    • Add component scripts (#1069)
    • link render-helpers & Update rax.js (#1074)
    • fix: path error in windows (#1059)
    • filename typo (#1054)
    • fix readme import useImport from 'rax-use-import'; (#1055)
    • rax-use-router with history (#1029)
    • fix: style transform error (#1051)
    • component generator & universal build (#967)
    • support webview replace api (#1050)
    • fix(rax-scripts): command line option "--output-path" not working (#1045)
    • feat(rax-script): support .tsx files (#1043)
    • chore: remove atag from github (#1042)
    • publish rax-cli 1.2.1 (#1033)
    • fix: hack to avoid bug in windmill iOS 10 (#1038)
    • Support jsx file sturcuture resolve and remove dep of rax (#1034)
    • fix: import driver-dom error (#1037)
    • fix: vue denpendencies config (#1036)
    • rax-benchmark (#999)

    v1.0.4

    • fix: reducer only exec once when reducer set inner function component (#1027)
    • fix: scheduler change to setTimeout (#1024)
    • Fix miniapp plugin (#1016)
    • publish atag (#1011)

    v1.0.2

    • fix: style 'top: 0' can't update (#1006)
    • fix: set two state but re-render once (#992)
    • fix: send location.replace once (#1005)
    • fix: remove inputType judgement (#997)
    • hotfix/scroll-with-animation (#996) (#980)
    • rax-scripts 1.2.0 (#987)
    • add forwardRef (#989)
    • Make driver-weex works and bump rax-cli rax-scprits 1.1.0 (#986)
    • optimize text listener (#985)
    • fix broken link to browser driver (#981)
    • export react compatibility entry (#978)
    • Fix/rax scripts (#979)
    • fix: atag input value in iOS (#976)
    • rax-cli v1.0.0 (#972)
    Source code(tar.gz)
    Source code(zip)
Owner
Alibaba
Alibaba Open Source
Alibaba
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

vue-next This is the repository for Vue 3.0. Quickstart Via CDN: <script src="https://unpkg.com/vue@next"></script> In-browser playground on Codepen S

vuejs 34.6k Jan 4, 2023
Dojo Framework. A Progressive Framework for Modern Web Apps

@dojo/framework Dojo is a progressive framework for modern web applications built with TypeScript. Visit us at dojo.io for documentation, tutorials, c

Dojo 549 Dec 25, 2022
A Web Component compiler for building fast, reusable UI components and static site generated Progressive Web Apps

Stencil: A Compiler for Web Components and PWAs npm init stencil Stencil is a simple compiler for generating Web Components and static site generated

Ionic 11.3k Jan 4, 2023
Relay is a JavaScript framework for building data-driven React applications.

Relay · Relay is a JavaScript framework for building data-driven React applications. Declarative: Never again communicate with your data store using a

Facebook 17.5k Jan 1, 2023
The tiny framework for building hypertext applications.

Hyperapp The tiny framework for building hypertext applications. Do more with less—We have minimized the concepts you need to learn to get stuff done.

Jorge Bucaran 18.9k Jan 1, 2023
A JavaScript Framework for Building Brilliant Applications

mithril.js What is Mithril? Installation Documentation Getting Help Contributing What is Mithril? A modern client-side JavaScript framework for buildi

null 13.5k Dec 28, 2022
Our official website - currently at https://haidevs.alawonn.com

The Haitian Developers community website - currently at https://haidevs.alawonn.com Getting Started First, run the development server: yarn dev Open h

Haitian Developers (HaiDevs) 2 Sep 9, 2022
:fire: An extremely fast, React-like JavaScript library for building modern user interfaces

Inferno is an insanely fast, React-like library for building high-performance user interfaces on both the client and server. Description The main obje

Inferno 15.6k Dec 31, 2022
CrossUI is a free Cross-Browser Javascript framework with cutting-edge functionality for rich web application

CrossUI is a free Cross-Browser Javascript framework with cutting-edge functionality for rich web application

Jack Li 1.4k Jan 3, 2023
🌱 React and redux based, lightweight and elm-style framework. (Inspired by elm and choo)

English | 简体中文 dva Lightweight front-end framework based on redux, redux-saga and react-router. (Inspired by elm and choo) Features Easy to learn, eas

null 16.1k Jan 4, 2023
A declarative, efficient, and flexible JavaScript library for building user interfaces.

React · React is a JavaScript library for building user interfaces. Declarative: React makes it painless to create interactive UIs. Design simple view

Facebook 200k Jan 4, 2023
A declarative, HTML-based language that makes building web apps fun

A declarative, HTML-based language that makes building web apps fun ?? Docs ∙ Try Online ∙ Contribute ∙ Get Support Intro Marko is HTML re-imagined as

Marko 12k Jan 3, 2023
A declarative, efficient, and flexible JavaScript library for building user interfaces.

Solid is a declarative JavaScript library for creating user interfaces. It does not use a Virtual DOM. Instead it opts to compile its templates down t

Ryan Carniato 24.5k Jan 4, 2023
jCore - JavaScript library for building UI components

JavaScript library for building UI components

iOnStage 11 Jan 21, 2022
A blazing fast React alternative, compatible with IE8 and React 16.

Nerv is a virtual-dom based JavaScript (TypeScript) library with identical React 16 API, which offers much higher performance, tinier package size and

null 5.4k Jan 4, 2023
One framework. Mobile & desktop.

Angular - One framework. Mobile & desktop. Angular is a development platform for building mobile and desktop web applications using Typescript/JavaScr

Angular 85.6k Dec 31, 2022
Ember.js - A JavaScript framework for creating ambitious web applications

Ember.js is a JavaScript framework that greatly reduces the time, effort and resources needed to build any web application. It is focused on making yo

Ember.js 22.4k Jan 4, 2023
A rugged, minimal framework for composing JavaScript behavior in your markup.

Alpine.js Alpine.js offers you the reactive and declarative nature of big frameworks like Vue or React at a much lower cost. You get to keep your DOM,

Alpine.js 22.5k Jan 2, 2023
The AMP web component framework.

AMP ⚡ ⚡ ⚡ ⚡ Metrics Tooling AMP is a web component framework for easily creating user-first websites, stories, ads, emails and more. AMP is an open so

AMP 14.9k Jan 4, 2023