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 动态改变图片大小
Jun 11 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
script标签的 charset 属性使用说明
Dec 04 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
Dec 13 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
Jan 24 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
AnjularJS中$scope和$rootScope的区别小结
Sep 18 Javascript
学习vue.js条件渲染
Dec 03 Javascript
浅谈jquery拼接字符串效率比较高的方法
Feb 22 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
May 15 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中进行身份认证
2006/10/09 PHP
PHP通用检测函数集合
2006/11/25 PHP
php获取字段名示例分享
2014/03/03 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
python函数的5种参数详解
2017/02/24 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
实践Vim配置python开发环境
2018/07/02 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python代码太长换行的实现
2019/07/05 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
详解Django CAS 解决方案
2019/10/30 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
聊聊python中的异常嵌套
2020/09/01 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
Android笔试题总结
2014/11/29 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
生物科学专业个人求职信范文
2013/12/05 职场文书
婚庆公司计划书
2014/09/15 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
DSP接收机前端设想
2022/04/05 无线电