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 相关文章推荐
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 Javascript
firefox插件Firebug的使用教程
Jan 02 Javascript
用js解决数字不能换行问题
Aug 10 Javascript
js确定对象类型方法
Mar 30 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
微信小程序之小豆瓣图书实例
Nov 30 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
Jan 08 Javascript
深入Vue-Router路由嵌套理解
Aug 13 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 Javascript
javascript实现简易聊天室
Jul 12 Javascript
Node使用Selenium进行前端自动化操作的代码实现
Oct 10 Javascript
vue 获取url里参数的两种方法小结
Nov 12 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 is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
python实现kMeans算法
2017/12/21 Python
Python找出最小的K个数实例代码
2018/01/04 Python
python实现换位加密算法的示例
2018/10/14 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python3 深浅copy对比详解
2019/08/12 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
十佳美德少年事迹材料
2014/02/05 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
综合实践活动报告
2015/02/05 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript