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 相关文章推荐
window.open 以post方式传递参数示例代码
Feb 27 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
javascript实现标签切换代码示例
May 22 Javascript
浅析JavaScript 箭头函数 generator Date JSON
May 23 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
Dec 22 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
vue使用xe-utils函数库的具体方法
Mar 06 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
Vue表情输入组件 微信face表情组件
Feb 11 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 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
B2K与车机的中波PK
2021/03/02 无线电
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python字符串转换成浮点数函数分享
2015/07/24 Python
python分析作业提交情况
2017/11/22 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
Python流程控制 if else实现解析
2019/09/02 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
升职自荐书范文
2013/11/28 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
2014最新实习证明模板
2014/10/02 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
夏洛特的网观后感
2015/06/15 职场文书
初中班主任工作随笔
2015/08/15 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python