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 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
Aug 04 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
js将键值对字符串转为json字符串的方法
Mar 30 Javascript
vue数据响应式原理知识点总结
Feb 16 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 06 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 函数执行效率的小比较
2010/10/17 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
python用户管理系统的实例讲解
2017/12/23 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
理工科学生的自我评价
2013/12/15 职场文书
导游的职业规划书范文
2013/12/27 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
中秋节主持词
2014/04/02 职场文书
爱耳日活动总结
2014/04/30 职场文书
学生党员公开承诺书
2014/05/28 职场文书
信息员培训方案
2014/06/12 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
老乡聚会通知
2015/04/23 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
MySQL 字符集 character
2022/05/04 MySQL
Nginx的gzip相关介绍
2022/05/11 Servers