react-to-vue使用教程

标签: Vue  React  vue.js  react.js  javascript

 react-to-vue简介:

    react-to-vue是一个能把 react组件转换成 vue 组件的插件,目前来看它只支持基础的组件代码转换。也就是说 你react里不能有 react 的一些独有的api。比如:路由、ui库(例如:antd)等等。

react to vuegithub地址(https://github.com/vicwang163/react-to-vue)

作者的认为使用场景:

1. 你如果想开源好的组件,那可以先写react,再用react-to-vue转成vue,这样你写的组件变成了跨框架的组件,为绝大部分人服务

2. 如果是用vue在开发项目,但是有个组件不想自己开发,但是有现成好的react组件,那可以把它转成vue,那就拿来主义了,方便啊
3. 如果公司的有些部门想要从react转vue,进行重构一下,那可以对基本的react组件进行转化,大大提高了重构效率

原理步骤:

  1. 对于输入的文件首先使用babylon来解析,生成ast
  2. 如果文件是typescript,会去掉相应的ts描述
  3. 对ast进行遍历,首先提取propTypes和defaultProps
  4. 根据组件类型,处理函数组件和类组件
  5. 在类组件里面,需要转换生命周期,state等信息
  6. 最后根据提取到的信息拼接成vue组件,通过prettier-eslint来美化

react-to-vue的看法

这里 我的看法 是这个工具我觉得 挺新颖的。

 如何看待 React-to-Vue 工具?(https://www.zhihu.com/question/267938584)

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

react-to-vue用法

 安装:

npm install react-to-vue -g

 使用:

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
  -f --flow             it is a component with Flow type annotations
  -h, --help            output usage information
  •  -V, --version 输出版本号
  • -o --output [string] 输出的文件名
  • -t --ts它是一个typescript组件
  • -f --flow 它是具有流类型annotationst的组件
  • -h, --help 输出使用信息

具体示例和用法:

1.直接 rtv 你要转换的组件 ,它会直接 把转换的代码输出在 控制台

rtv index.jsx

转换结果截图

 react组件源代码如下:

import React, { Component, useEffect, useState } from 'react';
export default class SortableTrees extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      aa: "19",
      bb: "78"
    };
  }


  componentDidMount() {
    this.setState({
      aa: 999
    })
  }
  render() {

    let a = [1, 3, 4];
    let a1 = ["我", "爱", "你"];
    const { bb } = this.state;
    return (
      <div>
        <p>{a}</p>
        <p>{a1}</p>
        <p>{this.aa}</p>
        <p>{bb}</p>
      </div>
    )
  }
}

转换结果如下:

// export component
export default {
  name: 'sortable-trees',      
  data () {
    return {aa: '19', bb: '78'}
  },
  mounted () {
    this.aa = 999
  },
  render () {
    let a = [1, 3, 4]
    let a1 = ['我', '爱', '你']
    const {bb} = this
    return (
      <div>
        <p>{a}</p>
        <p>{a1}</p>
        <p>{this.aa}</p>
        <p>{bb}</p>
      </div>
    )
  }
}

测试过程中我发现 class组件 必须要 加上 constructor 要不然 它的state不会被转换。

直接写 state 它不会被识别为 data.

转换前:

import React, { Component, useEffect, useState } from 'react';
export default class SortableTrees extends React.Component {
  // constructor(props) {
  //   super(props)
  state = {
    aa: "19",
    bb: "78"
  };
  // }


  componentDidMount() {
    this.setState({
      aa: 999
    })
  }
  render() {

    let a = [1, 3, 4];
    let a1 = ["我", "爱", "你"];
    const { bb } = this.state;
    return (
      <div>
        <p>{a}</p>
        <p>{a1}</p>
        <p>{this.aa}</p>
        <p>{bb}</p>
      </div>
    )
  }
}

转换后:

这样明显就出现 错误了。

// export component
export default {
  name: 'sortable-trees',      
  mounted () {
    this.aa = 999
  },
  render () {
    let a = [1, 3, 4]
    let a1 = ['我', '爱', '你']
    const {bb} = this
    return (
      <div>
        <p>{a}</p>
        <p>{a1}</p>
        <p>{this.aa}</p>
        <p>{bb}</p>
      </div>
    )
  }
}

 2.综合使用命令

-V 输出 react-to-vue的版本

-f我目前没找到用法(我试了一下没看到效果,也有可能我用的不对)

-o 就是输出的 目录文件名或者 路径

例如:

  这个就是 把 index.jsx 转换的代码 生成一个ss.vue的文件

 rtv  -o ss.vue  index.jsx    

rtv  -o ss.vue  index.jsx

-t就是 ts语法

 但是 ts语法好像不太行 ,你react组建的 源代码也要是 ts 语法才行。

 rtv  -o ss.tsx -t  index.jsx

有问题可以给作者提问和建议: 

github react-to-vue issues(https://github.com/vicwang163/react-to-vue/issues)

版权声明:本文为weixin_44058725原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44058725/article/details/126364034

智能推荐

Git使用教程

一.SVN和Git区别  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,首先要从中央服务器哪里下载最新的版本,修改完成之后需要把内容提交到到中央服务器。集中式版本控制系统是必须联网才能工作。  Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。 二.操作 1)创建版本库...

phpstudy使用教程

phpstudy使用教程 市面上的PHP集成环境很多,没有最好的,只有更适用的,本教程带你简单使用phpstudy。 phpstudy下载地址:http://phpstudy.php.cn/(下载最新版即可)。 1、 下载后得到的是压缩文件,解压后得到如图文件。 2、 双击选择目录进行安装(目录可以任意选择但是不能包含中文和空格) 3、启动phpstudy客户端出现以下界面 4、增加项目 5、配置...

Pycharm简单使用教程

1,Pycharm下载 专业版是收费的,功能更全面点。 教育版或社区版是阉割版本,但它是免费的。 2、pycharm的安装 备注: 刚下载好的pycharm无法运行程序“ Cannot start process, the working directory…”, 两种解决方法 1.选择Run-Edit configurations。然后点击Environme...

PowerDesigner 使用教程

PowerDesigner 16.5 使用教程 PowerDesigner 16.5 一、打开软件 二、创建概念模型 三、新建表 四、显示SQL代码 五、字段名设置自动递增 PowerDesigner 16.5 PowerDesigner 16.5免费版是一款功能强大的建模软件,提供强大的元数据管理功能,可以帮助用户构建关键信息资产的360度全方位视图,创建多种类型的模型,包括概念数据模型、物理数...

ipython notebook使用教程

1. 环境 操作系统:ubuntu 14.04    2. 操作步骤   a)  安装pip工具 终端输入以下命令:   b) 安装ipython 终端输入以下命令:   c) 安装ipython[notebook] 终端输入以下命令: d) 启动ipython[notebook] 终端输入以下命令:   最近在使用jupyte...

猜你喜欢

Git基本使用教程

  现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。   首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:     在Re...

Maven的使用教程

一、相关介绍 1、项目的构建方式 1.Eclipse        手工操作较多,项目的构建过程都是独立的,很难一步完成。比如:编译、测试、部署等。开发时每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错 2.Ant Ant只是一个项目构建工具,它没有集成依赖管理。Ant在进行项目构建时,它没有对项目目录结构进行约定,需要手动指定源文件、类文件等...

iOS AVAudioEngine使用教程

翻译: AK 声明:转发本文,请联系作者授权 原文地址 在这个AVAudioEngine教程中,您将学习如何使用Apple的更高级音频工具包添加高级音频功能. 向大多数iOS开发人员提及音频处理,它们会给你带来恐惧和恐惧。这是因为,在iOS 8之前,要深入了解非常低层的Core Audio frameworw - 只有少数勇敢才才能做到这一点。值得庆幸的是,随着iOS 8和AVAudioEngin...

Mybatis基础(part 1)

一.mybatis调用SQL语句 1.使用XML配置SQL语句 在SqlMapConfig.xml配置数据源并指定映射配置文件的位置(每个DAO对应的XML文件,该文件映射了DAO的全限定类名)   2.使用注解配置sql语句 在SqlMapConfig.xml配置数据源和class属性(指定被注解的dao全限定类名),在DAO上写注解。 用注解来配置,故此处使用class属性指定被注解...

Docker 容器内运行 Dubbo 服务

原文:http://www.aqcoder.com/post/content?id=41 在使用 Docker 容器内运行 Dubbo 服务的时候一个令人很头痛的问题就是服务地址注册。 Docker 容器内有自己的 IP 段,和宿主主机是隔离的,Dubbo 会使用容器内的 IP 注册到 zookeeper 注册中心上。这样其他的服务是无法访问的。 方式一:–host 一个很直接的方案就...