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 无符号右移赋值操作
Apr 17 Javascript
日期处理的js库(迷你版)--自建js库总结
Nov 21 Javascript
js使用正则实现ReplaceAll全部替换的方法
Aug 22 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
vue写一个组件
Apr 09 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 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
php daodb插入、更新与删除数据
2009/03/19 PHP
php下批量挂马和批量清马代码
2011/02/27 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
客户端静态页面玩分页
2006/06/26 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
python版本单链表实现代码
2018/09/28 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
物业经理求职自我评价
2013/09/22 职场文书
小学生学习感言
2014/03/10 职场文书
党员公开承诺事项
2014/03/25 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript