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 Window及document对象详细整理
Jan 12 Javascript
js Event对象的5种坐标
Sep 12 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
原生js事件的添加和删除的封装
Jul 01 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
Mar 01 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
Mar 24 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
Dec 20 Javascript
vue组件横向树实现代码
Aug 02 Javascript
webpack中的模式(mode)使用详解
Feb 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
基于mysql的论坛(3)
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
Javascript 解疑
2009/11/11 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
JavaScript中的时间处理小结
2016/02/24 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
浅谈react性能优化的方法
2018/09/05 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python执行get提交的方法
2015/04/29 Python
python中defaultdict的用法详解
2017/06/07 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
django实现后台显示媒体文件
2020/04/07 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
PHP经典面试题
2016/09/03 面试题
小学生寒假家长评语
2014/04/16 职场文书
团日活动总结范文
2014/04/25 职场文书
经营目标管理责任书
2014/07/25 职场文书
商场周年庆活动方案
2014/08/19 职场文书
先进班组材料范文
2014/12/25 职场文书
亲属关系公证书样本
2015/01/23 职场文书
英语教师个人工作总结
2015/02/09 职场文书