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 相关文章推荐
javascript实现类似超链接的效果
Dec 26 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
js中的内部属性与delete操作符介绍
Aug 10 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
javascript中的replace函数(带注释demo)
Jan 07 Javascript
全站最详细的Vuex教程
Apr 13 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
Vue 实现把表单form数据 转化成json格式的数据
Oct 29 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
javascript 打印页面代码
2009/03/24 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
js实现简单计算器
2015/11/22 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
python实现bitmap数据结构详解
2014/02/17 Python
简洁的十分钟Python入门教程
2015/04/03 Python
python交易记录整合交易类详解
2019/07/03 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Python 如何批量更新已安装的库
2020/05/26 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
创先争优承诺书范文
2014/03/31 职场文书
绿色学校实施方案
2014/03/31 职场文书
销售团队激励口号
2014/06/06 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
详解Redis瘦身指南
2021/05/26 Redis
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python