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鼠标划过切换效果
Jun 30 Javascript
PHP abstract与interface之间的区别
Nov 11 Javascript
解决ueditor jquery javascript 取值问题
Dec 30 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 Javascript
基于jQuery仿淘宝产品图片放大镜特效
Oct 19 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
Bootstrap table的使用方法
Nov 02 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
微信小程序实现底部导航
Nov 05 Javascript
javascript事件监听与事件委托实例详解
Aug 16 Javascript
ES10的13个新特性示例(小结)
Sep 23 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
jQuery 技巧小结
2010/04/02 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
Python实现获取网站PR及百度权重
2015/01/21 Python
Python实现二叉堆
2016/02/03 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python单例模式实例解析
2018/08/28 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
如何利用python生成MD5并去重
2020/12/07 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
总经理秘书工作职责
2013/12/26 职场文书
社团招新宣传语
2015/07/13 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android