React 组件转 Vue 组件的命令写法


Posted in Javascript onFebruary 28, 2018

基于目前React和Vue比较火,开发react-to-vue 工具的目的是为了进一步提高组件的可复用用性,让组件复用不仅仅局限在一个框架里面

简介

对于react-to-vue工具,转化的是基本的react component,而不是全部的react应用。而基本react component的定义更多是基于props和state来渲染的组件,其中也可以包括发请求。

本文先介绍两个框架的组件共性和不兼容的地方,再介绍react-to-vue的使用和原理。在实际业务中,陆金所100多个的react基础业务组件,react-to-vue可以转化90%以上,变成vue组件。

盘点两个框架的组件共性

1. props

// react
FrontendMagazine.propTypes = {
  name: PropTypes.string
}
FrontendMagazine.defaultProps = {
  name: 'FrontendMagazine'
}
// vue
{
  name: 'frontend-magazine',
  props: {
    name: {
      type: String,
      default: 'FrontendMagazine'
    }
  }
}

2. 组件自有状态

框架 说明
React 在初始化的时候,通过this.state = {xxx}来设置
Vue 通过data 返回函数来设置值,不同于react的state,vue是响应式

3. 生命周期

虽然生命周期名不一样,但是差不多有对应的

React 组件转 Vue 组件的命令写法React 组件转 Vue 组件的命令写法

4. 处理事件

框架 说明
React 相应的事件都加到了组件的实例方法上
Vue 设计上比较好,处理事件都加在一个methods对象下面,方便查找,更直观
// react
class FrontendMagazine {
  clickme () {
    // xxxx
  }
}
// vue
{
  name: 'frontend-magazine',
  methods: {
    clickme () {
      // xxx
    }
  }
}

5. 组件错误捕获

框架 说明
React componentDidCatch
Vue errorCaptured

6. jsx语法

react是基于jsx来写的,对于vue来说,虽然在好多场景下,可以使用template来写,但是vue也完全支持jsx语法的,对于本工具,也只是把react的jsx语法转换成vue支持的jsx

两个框架不兼容的地方

react在最新版本里面,有flagments的支持,允许根节点返回多个节点,目前没有看到vue支持的,还有就是在设计react组件的时候,使用了高阶,对于本工具,也是不支持的

react-to-vue工具

安装及使用

# install
npm install -g react-to-vue
# usage
Usage: rtv [options] file(react component)

Options:

-V, --version     output the version number
 -o --output [string] the output file name
 -t --ts        it is a typescript component
 -h, --help      output usage information

 # demo

 rtv demo.js

原理步骤

  1. 对于输入的文件首先使用babylon来解析,生成ast
  2. 如果文件是typescript,会去掉相应的ts描述
  3. 对ast进行遍历,首先提取propTypes和defaultProps
  4. 根据组件类型,处理函数组件和类组件
  5. 在类组件里面,需要转换生命周期,state等信息
  6. 最后根据提取到的信息拼接成vue组件,通过prettier-eslint来美化

转化前后对比

React 组件转 Vue 组件的命令写法 

如何同时写开源的react和vue组件

如果你的组件想要被大家开源使用,作者这里有一个小提议,可以边写react组件,边试着转化成vue组件,如果转化有问题,试着改代码,尽可能跨框架支持,这样你写的组件肯定可以在react和vue项目中同时使用。

总结

以上所述是小编给大家介绍的React 组件转 Vue 组件的命令写法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
JSON与XML优缺点对比分析
Jul 17 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
老生常谈 关于JavaScript的类的继承
Jun 24 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
Sep 14 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
从零开始搭建一个react项目开发
Feb 09 Javascript
vue 子组件向父组件传值方法
Feb 26 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
JS实现的tab切换并显示相应内容模块功能示例
Aug 03 Javascript
微信小程序实现锚点功能
Nov 20 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 #Javascript
Vue中this.$router.push参数获取方法
Feb 27 #Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
Feb 27 #Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 #Javascript
angular json对象push到数组中的方法
Feb 27 #Javascript
angularjs实现table增加tr的方法
Feb 27 #Javascript
关于redux-saga中take使用方法详解
Feb 27 #Javascript
You might like
php 方便水印和缩略图的图形类
2009/05/21 PHP
php实现的短网址算法分享
2014/06/20 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
使用正则替换变量
2007/05/05 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
详解python发送各类邮件的主要方法
2016/12/22 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
材料加工工程求职信
2014/02/19 职场文书
周年庆典主持词
2014/04/02 职场文书
Pygame Event事件模块的详细示例
2021/11/17 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS