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 相关文章推荐
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
JS使用单链表统计英语单词出现次数
Jun 16 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
基于JS实现翻书效果的页面切换样式
Feb 16 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
Dec 08 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 Javascript
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
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
合作指挥官:孟斯克
2020/03/16 星际争霸
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
在Python的web框架中配置app的教程
2015/04/30 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
Python对象属性自动更新操作示例
2018/06/15 Python
详解Python locals()的陷阱
2019/03/26 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
气象学专业个人求职信
2014/04/22 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
学生逃课检讨书
2015/02/17 职场文书
公司员工辞职信范文
2015/05/12 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书