前端神器:一行命令,React 组件转 Vue 组件

530 阅读5分钟
原文链接: segmentfault.com

首页问答专栏 讲堂 更多

SegmentFault

搜索 区块链人工智能前端 后端Android iOS 工具安全程序员 行业 SF官方

在 SegmentFault,学习技能、解决问题

每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

免费注册 立即登录 5

前端神器:一行命令,React 组件转 Vue 组件

清蒸不是水煮 1 天前 发布于前端 qianduan.group

基于目前React和Vue比较火,开发react-to-vue工具的目的是为了进一步提高组件的可复用用性,让组件复用不仅仅局限在一个框架里面

前端神器:一行命令,React 组件转 Vue 组件

点击阅读原文

前端神器:一行命令,React 组件转 Vue 组件

1 天前 发布,来源:qianduan.group

基于目前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 通过propTypes来定义属性名和属性类型,defaultProps用来设置默认值
Vue 通过添加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. 生命周期

虽然生命周期名不一样,但是差不多有对应的

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来美化

转化前后对比

image.a2ac1a4ae3a7.png

如何同时写开源的react和vue组件

如果你的组件想要被大家开源使用,作者这里有一个小提议,可以边写react组件,边试着转化成vue组件,如果转化有问题,试着改代码,尽可能跨框架支持,这样你写的组件肯定可以在react和vue项目中同时使用。

结尾

项目地址: github.com/vicwang163/…, 欢迎各位大大来提bug,把项目越做越好

1

© 著作权归原作者所有 阅读原文 折叠收起 266 浏览 142 收藏 报告 阅读模式 分享扩散: ••• 评论 默认排序 时间排序 发布评论 载入中... 显示更多评论 过年学区块链 × Close

我要该,理由是:

    返回重选 取消 提交 ×Close

    关闭问题(请谨慎操作)

    删除问题(请谨慎操作)

    删除回答(请谨慎操作)

    忽略回答

    关闭理由: 删除理由: 忽略理由:

    推广(招聘、广告、SEO 等)方面的内容 与已有问题重复(请编辑该提问指向已有相同问题) 答非所问,不符合答题要求 宜作评论而非答案 带有人身攻击、辱骂、仇恨等违反条款的内容 无法获得确切结果的问题 非开发直接相关的问题 非技术提问的讨论型问题 其他原因(请补充说明)

    补充说明:

    取消 提交
    产品
    热门问答
    热门专栏
    热门讲堂
    最新活动
    技术圈
    找工作
    移动客户端
    资源
    每周精选
    用户排行榜
    徽章
    帮助中心
    声望与权限
    社区服务中心
    开发手册
    商务
    人才服务
    企业培训
    活动策划
    广告投放
    合作联系
    关于
    关于我们
    加入我们
    联系我们
    关注
    产品技术日志
    社区运营日志
    市场运营日志
    团队日志
    社区访谈
    条款
    服务条款
    内容许可

    扫一扫下载 App

    Copyright © 2011-2018 SegmentFault. 当前呈现版本 17.06.16
    浙ICP备 15005796号-2   浙公网安备 33010602002000号 杭州堆栈科技有限公司版权所有

    CDN 存储服务由 又拍云 赞助提供

    移动版 桌面版

    回顶部

    记笔记

    标题 纯文本 Markdown Javascript CSS HTML PHP Python Ruby Go C/C++ Java Shell/Bash 空格缩进 Tabs 缩进 2 4 自动换行 不换行
    xxxxxxxxxx
    已保存 [舍弃] 保存私密笔记 保存公开笔记