用户
 ?#19968;?#23494;码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

Remax - 使用真正的 React 构建小程序

Rolan 2019-8-27 00:11

为什么要用 React 来构建小程序 因为 React 是我们最熟悉的技术。 小程序糟糕的 API 设计已经有很多文章吐槽,这里就不再赘述了。再加上现在一大堆小程序?#25945;ǎ?#27599;个?#25945;?#20043;间又有大大小小的差异,这对于有跨?#25945;?#38656;求 ...

为什么要用 React 来构建小程序

因为 React 是我们最熟悉的技术。

小程序糟糕的 API 设计已经有很多文章吐槽,这里就不再赘述了。再加上现在一大堆小程序?#25945;ǎ?#27599;个?#25945;?#20043;间又有大大小小的差异,这对于有跨?#25945;?#38656;求的小程序来说无异于是一场灾?#36873;?/p>

React 的社区生态体系非常庞大,通过在小程序中引入 React 以及 React Hooks 提供的逻辑抽象能力,我们可以在小程序中直接利用 React 生态体系中大量的技术沉淀(比如:react-usefield-form)。

更完整的 TypeScript 支持。?#27604;?#20320;也可以用 TypeScript 去写现有的小程序,但是由于小程序的架构原因,模板层跟逻辑层(也就是 Page)有天然的割裂,即使在逻辑层使用了 TypeScript,在模板层也无法享受类型检查和自动补全带来的便利。引入 React 后,我们的代码全部运行在逻辑层中,可以全程静态类型护航,给你满满的安全?#23567;?/p>

现有的方案

目前社区中使用 React 构建小程序的方案大都使用静态编译的方式实现。所谓静态编译,就是使用工具把代码语法分析一遍,把其中的 JSX 部分?#21520;?#36753;部分抽取出来,?#30452;?#29983;产小程序的模板和 Page 定义。

这种方案最大的问题就是会有很多限制,因为语法分析是静态的,所以这些方案都会去限制一些动态的写法。另外正是因为 JavaScript 语言的动态性,要去做语法分析本身就是件很复杂的事情,所以这些方案实现起来往往也非常复杂。

最重要的,静态编译后的你的代码就转换成了小程序代码,运行时其实并没有 React 的存在,你只是用了 React 的写法, 而不是真正的在用 React 做应用。

我们的方案

今年初的时候,@xcodebuild 向大家介绍了如何在小程序中使用 React with Hooks。这是一个非常创新的方案,我们在对这个方案做了完善,并且在线上小程序中得到验证后,正式发布了基于 React 的小程序开发框架:

www.remaxjs.org

Remax 让你可以使用真正的 React 去构建小程序,你可以他理解成面向小程序的 React Native。

Remax 原理

首选来看一下小程序的架构(支付宝和微信大同小异):

正如上面提到的,小程序架构分为两层,你写的逻辑代码独立运行在一个进程中,每个页面会有自己独立的渲染进程(也就是一个 webview)用来渲染模板。而整个小程序又运行在 APP 容器中(也就是支付宝和微信本身)。逻辑层和视图层之间通过建立一个消息通道来通信。

再来看下 React 的架构:

最下面一层是 React 本身,上层的 ReactDOM 和 ReactNative 我们称之为「Renderer」。Renderer 跟 React 之间通过 ReactReconciler 连接把元素(也就是通常所说的?#24863;?#25311; DOM」)渲染到对应的?#25945;?#19978;。而 Remax 就是一个我们实现的 Renderer,它?#36873;感?#25311; DOM」渲染到了小程序的视图层上。

可以看到,我们把 React 和 ReactReconciler 运行在小程序的逻辑层中,并通过 Remax 把生成的?#24863;?#25311; DOM」渲染到视图层。从而做到了使用真正的 React 去构建小程序。

最后

正如第一段中提到的,把 React 运行在小程序中可以带来非常大的想象力。小程序本身可以说是一种创新,它把应用分为两层来提高视图层的渲染速度,但是微信从一开始就选择使用私有且落后(起码目前看来是落后的)的技术方案来定义小程序,而后面的追随者为了吸引开发者亦使用了跟微信小程序类似的设计。Remax 希望能打破这个?#32622;媯?#36890;过开放的生态为开发者带来全新的小程序开发体验。

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: yesmeck 来自: 掘金
不朽的浪漫援彩金