资讯专栏INFORMATION COLUMN

用 Vue 来写 React 和 ReactNative

maybe_009 / 633人阅读

摘要:的响应核心的响应式系统是支撑整个框架运行的关键,也是的核心之一,官方对这个核心的分层设计得很好也是依靠其驱动原生视图。我们日常用到的都由核心提供,对这个核心稍作修改,去掉和,意外的获得了一个极小的响应核心,可以运行于任何标准引擎下。

GitHub: react-vue

前言

react-vue 为两大前端框架搭了一座桥,它主要有三种用法

使用 Vue 的响应式系统驱动 React 渲染

使用 react-vue-loader 将 Vue 组件编译成 React 组件

使用 react-vue-native-script 在 React Native 下运行 Vue 组件

这篇文章会向大家介绍 react-vue 的三种用法及一些实现细节,它能做到什么程度,以及它带来的一些可能性。需要提前知会的一点:如果你熟悉 React 和 Vue,在这里你不会接触到任何新的概念。

Vue 的响应核心

Vue 的响应式系统是支撑整个 Vue 框架运行的关键,也是 Vue 的核心之一,官方对这个核心的分层设计得很好(Weex 也是依靠其驱动原生视图)。若你有幸看过 Vue 的源码,这个核心就在它的 core 目录下。

我们日常用到的 datacomputedwatchmethodslifecyclerender 都由核心提供,对这个核心稍作修改,去掉 renderlifecycle,意外的获得了一个极小的响应核心(gzip 9kb),可以运行于任何标准 JS 引擎下。这构成了 react-vue 的核心。

响应式的 React

react-vue 额外添加了一个 observer 函数,用于观察 react 组件,并与响应核心建立联系。

import React, { Component } from "react";
import Vue, { observer } from "react-vue";

const store = new Vue({
  data () {
    return {
      count: 0
    }
  },
  methods: {
    increase () {
      this.count ++;
    }
  }
});

@observer
export default class Demo extends Component {
  render () {
    return 

{store.count}

; } }

如上代码实现了一个简单的递增计数器,如果你接触过 mobx,对这种开发模式应该会很熟悉。

使用 Vue 的响应核心驱动 React,还能获得另一个礼物 Vuex,这里有一个将 Vuex 与 React 结合的简单 demo,如此,你便可以在 React 体系下使用 Vuex 构建大型应用。

React 下运行 Vue 组件

react-vue 支持将 Vue 组件编译到 React,只需引入 react-vue-loader,这个 loader 基于 vue-loader 做了一些改造以适应 React 的运行环境。我们几乎可以使用 vue-loader 提供的所有配置,详细的文档可以参考这里。如下是一个你可能会用到的 webpack 配置

module: {
  rules: [
    {
      test: /.vue$/,
      loader: "react-vue-loader"
    }
  ]
}

很简单对吧,React 和 Vue 的混合开发模式会产生一些很有趣的事情,你写的 React 组件,可以直接在 Vue 组件内使用,反过来 Vue 组件也可以直接在 React 组件内运行。

// One.js
import React, { Component } from "react";
import Two from "./Two";

export default class One extends Component {
  render() {
    return Hello Vue;
  }
}



// Three.js
import React, { Component } from "react";

export default class Three extends Component {
  render () {
    return {this.props.children}
  }
}

这种混合开发让技术栈的切换成本变得很低,React 和 Vue 也不再是非此即彼,如果你的团队在 React 下积累深厚,想尝试一下 Vue 开发带来的快感,引入一个 loader 就可以了;如果你的团队在 Vue 下造诣颇深,想试试 React 带来的思维淬炼,搭建一个 React 的运行环境,之前写的 Vue 代码也可在其上良好的运行。

react-vue 对组件库的开发也提供了新的思路,你只需写一套 Vue 组件,即可同时运行于 React 和 Vue。这里有一个项目对 vue-material 组件库做了一个测试,通过 npm install --save vue-material 安装组件库,在 React 下可以运行其中 20/29 的组件。

react-vue 有其局限性,编译过来的 Vue 组件依旧跑在 React 的运行时,所以你不能使用 Vue 提供的 render 函数(使用 template 代替),你也无法在 Vue 组件内访问 VNode。可以查看详细的 API 支持文档。

React Native 下运行 Vue 组件

这可能是最有趣的一部分了,react-vue 的响应核心是平台无关的,它可以跑在 React 下,自然也能跑在 React Native 下。

React Native 使用了一个量身定制的打包工具,我们无法像 Web 那样引入一个 loader 来实现无缝接合。你可以使用 react-vue-native-scripts,一个 npm 脚本,开启一个轻量的 node 服务器,监听项目中 .vue 文件的变化,生成一份同名的 .js 文件。

是不是有点 Weex 的意思了,Native 不同于 Web,在 Web 下用惯了的标签,在 Native 下都是没有的,React Native 官方提供的所有组件,都作为内置组件预先引入了,你无需引用可直接使用。当然,如果习惯了 Web 标签,可以这样

import { View } from "react-native";
import { Vue } from "react-vue";

Vue.component("div", View);

export default Vue;

这里有一个 Hacker News 的 demo,使用 React Native 作为底层,上层使用 Vue 和 Vuex 构建,效果还不错,你可以看看。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/83672.html

相关文章

  • ReactNative&weex&DeviceOne对比

    摘要:平台要求基本都是以上需扩展不支持已支持。性能重心比较多,目前性能关注不多。成立也比较晚,案例也有一些,基本都是近一年内的案例。较晚,以公司自己人居多,成熟需一段时间。较晚,社区人相对少一些,内容相对成熟。   React Native出来有一段时间了,国内的weex和deviceone是近期发布的,我可以说从2011年就开始关注快速开发的跨平台平台技术了,接触过phoneGap、数字天...

    helloworldcoding 评论0 收藏0
  • 你想要的全平台全栈开源项目-VueReact、小程序、安卓、ReactNative、java后端

    摘要:无论你是前端后端移动端开发人员,或是设计师产品经理,都可以在平台上发布项目,与志同道合的小伙伴一起协作完成项目。 全平台全栈开源项目 coderiver 今天终于开始前后端联调了~ 首先感谢大家的支持,coderiver 在 GitHub 上开源两周,获得了 54 个 Star,9 个 Fork,5 个 Watch。 这些鼓励和认可也更加坚定了我继续写下去的决心~ 再次感谢各位大佬! ...

    Maxiye 评论0 收藏0
  • 2017-06-26 前端日报

    摘要:前端日报精选第期正则表达式回溯法原理入门教程众成翻译在中调试入门教程众成翻译框架之战众成翻译中文技术周刊期知乎专栏新特性之命令掘金创建对象的七种方式中的惰性数组介绍众成翻译跟手转动的罗盘指针掘金和简介修仙之路仿音乐移 2017-06-26 前端日报 精选 【第977期】正则表达式回溯法原理npm 入门教程 - 众成翻译在 Chrome DevTools 中调试 JavaScript 入...

    LeviDing 评论0 收藏0

发表评论

0条评论

maybe_009

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<