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第一天(Jquery学习笔记)
May 11 Javascript
js选择并转移导航菜单示例代码
Aug 19 Javascript
Angular Js文件上传之form-data
Aug 28 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
layer提示框添加多个按钮选择的实例
Sep 12 Javascript
解决layui富文本编辑器图片上传无法回显的问题
Sep 18 Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 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
模仿OSO的论坛(二)
2006/10/09 PHP
PHP Pear 安装及使用
2009/03/19 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
js输出列表实现代码
2010/09/12 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python socket实现的简单通信功能示例
2018/08/21 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
Java语言的优势
2015/01/10 面试题
车间副主任岗位职责
2013/12/24 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
老员工辞职信范文
2015/05/12 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL