• react-to-vue使用教程


     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

     使用:

    1. Usage: rtv [options] file(react component)
    2. Options:
    3. -V, --version output the version number
    4. -o --output [string] the output file name
    5. -t --ts it is a typescript component
    6. -f --flow it is a component with Flow type annotations
    7. -h, --help output usage information
    •  -V, --version 输出版本号
    • -o --output [string] 输出的文件名
    • -t --ts它是一个typescript组件
    • -f --flow 它是具有流类型annotationst的组件
    • -h, --help 输出使用信息

    具体示例和用法:

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

    rtv index.jsx

    转换结果截图

     react组件源代码如下:

    1. import React, { Component, useEffect, useState } from 'react';
    2. export default class SortableTrees extends React.Component {
    3. constructor(props) {
    4. super(props)
    5. this.state = {
    6. aa: "19",
    7. bb: "78"
    8. };
    9. }
    10. componentDidMount() {
    11. this.setState({
    12. aa: 999
    13. })
    14. }
    15. render() {
    16. let a = [1, 3, 4];
    17. let a1 = ["我", "爱", "你"];
    18. const { bb } = this.state;
    19. return (
    20. <div>
    21. <p>{a}p>
    22. <p>{a1}p>
    23. <p>{this.aa}p>
    24. <p>{bb}p>
    25. div>
    26. )
    27. }
    28. }

    转换结果如下:

    1. // export component
    2. export default {
    3. name: 'sortable-trees',
    4. data () {
    5. return {aa: '19', bb: '78'}
    6. },
    7. mounted () {
    8. this.aa = 999
    9. },
    10. render () {
    11. let a = [1, 3, 4]
    12. let a1 = ['我', '爱', '你']
    13. const {bb} = this
    14. return (
    15. <div>
    16. <p>{a}p>
    17. <p>{a1}p>
    18. <p>{this.aa}p>
    19. <p>{bb}p>
    20. div>
    21. )
    22. }
    23. }

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

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

    转换前:

    1. import React, { Component, useEffect, useState } from 'react';
    2. export default class SortableTrees extends React.Component {
    3. // constructor(props) {
    4. // super(props)
    5. state = {
    6. aa: "19",
    7. bb: "78"
    8. };
    9. // }
    10. componentDidMount() {
    11. this.setState({
    12. aa: 999
    13. })
    14. }
    15. render() {
    16. let a = [1, 3, 4];
    17. let a1 = ["我", "爱", "你"];
    18. const { bb } = this.state;
    19. return (
    20. <div>
    21. <p>{a}p>
    22. <p>{a1}p>
    23. <p>{this.aa}p>
    24. <p>{bb}p>
    25. div>
    26. )
    27. }
    28. }

    转换后:

    这样明显就出现 错误了。

    1. // export component
    2. export default {
    3. name: 'sortable-trees',
    4. mounted () {
    5. this.aa = 999
    6. },
    7. render () {
    8. let a = [1, 3, 4]
    9. let a1 = ['我', '爱', '你']
    10. const {bb} = this
    11. return (
    12. <div>
    13. <p>{a}p>
    14. <p>{a1}p>
    15. <p>{this.aa}p>
    16. <p>{bb}p>
    17. div>
    18. )
    19. }
    20. }

     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)

  • 相关阅读:
    牛客模拟面 面经1/2
    ASP.NET第五章 Application、Session和Cookie对象
    The Cherno——OpenGL
    花菁荧光染料Cy3/Cy5/Cy7标记COX-2环氧合酶,Cy3/Cy5/Cy7-Cyclooxygenase-2
    简单中继实验
    webrtc opus 音频编码支持SILK和CELT模式
    【机器学习基础】机器学习概述
    CTF/AWD竞赛标准参考书+实战指南:《AWD特训营》
    SpringBoot 实现数据脱敏
    一个超经典 WinForm 卡死问题的最后一次反思
  • 原文地址:https://blog.csdn.net/weixin_44058725/article/details/126364034