react-to-vue使用教程

news/2024/7/15 19:33:23 标签: 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用法

 安装:

javascript">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 你要转换的组件 ,它会直接 把转换的代码输出在 控制台

javascript">rtv index.jsx

转换结果截图

 react组件源代码如下:

javascript">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>
    )
  }
}

转换结果如下:

javascript">// 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.

转换前:

javascript">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>
    )
  }
}

转换后:

这样明显就出现 错误了。

javascript">// 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的文件

javascript"> rtv  -o ss.vue  index.jsx    

rtv  -o ss.vue  index.jsx

-t就是 ts语法

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

javascript"> rtv  -o ss.tsx -t  index.jsx

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

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


http://www.niftyadmin.cn/n/1557354.html

相关文章

[iOS MQTT消息订阅] MQTTClient框架

讲解的一些不错文章 iOS中MQTT的实现 iOS,MQTTClient使用-项目中用到此 iOS MQTT—-MQTTClient实战-看这篇的就够了 MQTT协议之消息处理流程 ios MQTT协议及通讯的解决方案 iOS,MQTTClient使用 以上两个帖子足以学习使用MQTT消息订阅推送 这里记录一点 使用MQTTClient…

js 利用window.getSelection() 实现简单的文字标注(鼠标选中文本,给其加下滑线、背景色)

场景&#xff1a; 选中文本&#xff0c;对其标注类似于 富文本编辑器只不过 它直接在 html里操作。 比如&#xff1a;选中一个 文字 点击 背景色 他就会给文字 加上一个 对应的背景色。 效果图&#xff1a; 6666 实现过程 window.getSelection() 定义和用法&#xff1a…

今天俺要说一说装饰着模式(Decorator)

前言&#xff1a;装饰者模式,又叫做装饰器模式.顾名思义,就是给对象包裹一层,包装。让它变成你喜欢的对象。这种模式在我们开发中经常会用到&#xff0c;它是一种处理问题的技巧,即不让程序死板,也可以扩展程序。 (一)何时能用到它》》》 1.需要给类一个扩展,或者给类附加一个职…

dva.js打包 hash文件名

遇到的问题&#xff1a; 我的项目是dva.js 默认 打包 文件是 不带hash的&#xff0c;这样就导致每次 部署后都需要手动清除浏览器才行。所以 我就想到了 文件名hash。 dva 2.3.1版本 具体配置&#xff1a; 具体配置步骤如下&#xff1a; dva 的配置是在 .webapckrc.js配置的…

[iOS - (void)drawRect:(CGRect)rect] 绘制一个居中的矩形

使用到: CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况 //CGRectInset 将原来的矩形放大或者缩小&#xff0c;正表示缩小&#xff0c;&#xff0d;表示放大。 CGRect rect CGRectMake(20, 50, 100, 80);CGRect rect1CGRectInset(rect, -10, 20);…

linux之 修改磁盘调度算法

IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做 cfq(Complete F…

[iOS js与oc原生互相调用] js调用oc的两种方式

##先总结 参考帖子: oc/js通信demo:(包括WKWebView/UIWebView). 包括js以及对象方式和回调方式从oc原生获取值 iOS js oc相互调用&#xff08;JavaScriptCore&#xff09;&#xff08;二&#xff09; (核心js 中是通过一个对象来调用方法的 JSExport ) http://blog.csdn.net…

react报:export useHistory (imported as useHistory) was not found in react-router-dom

报错信息&#xff1a; react-router-dom v6 里 export useHistory (imported as useHistory) was not found in react-router-dom; 解决方案&#xff1a; 从报错 很容易看出来 是 useHistory 引入的问题。这个就涉及 react-router-dom这个插件的版本问题了。 react-router…