• 竟然可以在一个项目中混用 Vue 和 React?


    React和Vue是前端开发中的两大热门框架,各自都有着强大的功能和丰富的生态系统。然而,你有没有想过,在一个项目中同时使用React和Vue?是的,你没有听错,可以在同一个项目中混用这两个框架!本文就来分享 3 个用于混合使用 React 和 Vue 的工具!

    #Veaury

    Veaury 是一个基于 React 和 Vue3 的工具库,主要用于React和Vue在一个项目中公共使用的场景,主要运用在项目迁移、技术栈融合的开发模式、跨技术栈使用第三方组件的场景。

    Veaury的特点如下:

    1. 同时支持Vue3和React,方便在一个项目中公共使用;

    2. 支持同一个应用中出现的vue组件和react组件的context共享;

    3. 支持跨框架的hooks调用,可以在react组件中使用vue的hooks,也可以在vue组件中使用react的hooks;

    4. 可以解决React和Vue在公共使用时的代码重复、冗余的问题。

    5. 在一个应用中可以随意使用React或者Vue的第三方组件, 比如 antd, element-ui, vuetify。

    6. 提供了详细的官方文档,包括英文版和中文版。

    图片

    Veaury 的文档写的非常详细,这里就不再详细介绍其使用方式了。需要注意的是,Veaury 并不支持 Vue 2,如果需要使用Vue 2,可以使用下面要介绍的工具库。

    Github:https://github.com/devilwjp/veaury

    #Vuera

    Vuera 是一个用于在 Vue 应用中使用 React 组件的库,同时也支持在 React 应用中使用 Vue 组件。它提供了一种方便的方式,使开发人员能够在不同的框架之间无缝地使用对方的组件。

    要在 Vue 应用中使用React组件,可以按照以下步骤使用Vuera。

    #安装插件

    1. 安装Vuera:使用npm或yarn在您的Vue项目中安装Vuera库。
    // 使用 yarn 安装
    
    yarn add vuera
    
    
    
    // 使用 npm 安装
    
    npm i -S vuera
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 安装依赖

    由于需要在Vue中使用React组件,所以首先需要在项目中安装 React,安装指令如下:

    npm install --save react react-dom
    
    • 1

    #项目配置

    babel.config.js文件中添加以下配置即可:

    {
    
      "presets": [
    
        "react"
    
      ],
    
      "plugins": [
    
        "vuera/babel"
    
      ]
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    接下来在项目中以插件的形式来引入并使用vuera库,可以在 main.js 中加入如下代码:

    import { VuePlugin } from 'vuera'
    
    Vue.use(VuePlugin)
    
    • 1
    • 2
    • 3

    #基本使用

    完成上述配置之后,就可以在Vue项目中引入并使用React组件了。

    React组件代码如下:

    import React from 'react'
    
    
    
    function myReactComponent(props) {
    
      const { message } = props
    
      function childClickHandle() {
    
        props.onMyEvent('React子组件传递的数据')
    
      }
    
      return (
    
        

    { message }

    ) } export default myReactComponent
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    Vue组件代码如下:

    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    在 Vue 项目中引入了这个 React 组件,效果如下:

    图片

    可以看到,这里实现了Vue到React组件的传值,并显示在了页面上。根据右上角的Chrome插件显示,这个项目中既使用了Vue又使用了React。

    点击页面中的按钮,可以看到,数据从React子组件传递到了Vue中:

    图片

    这样就简单实现了React和Vue组件之间的数据通信。

    #其他使用方式

    如果不想通过 Babel plugin 的方式引入的话,可以使用以下这两种方法。(1)使用wrapper组件

    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    (2)使用高阶组件的API

    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在 React 项目中使用 Vue 组件也是同理,可以参考官方文档。

    #注意

    Vuera 是一个比较成熟的 JavaScrip 库,但是目前已经不再维护(最近一次更新是三年前)。并且,该库不支持 Vue 3,如果想要支持 Vue 3,可以使用 Vueury。

    Github:https://github.com/akxcv/vuera

    #vuereact-combined

    vuereact-combined 是一个用于 Vue和React快捷集成的工具包,并且适合复杂的集成场景。通过这个工具,可以在任何的Vue和React项目中使用另一个类型框架的组件,并且解决了复杂的集成问题。

    vuera 开辟了Vue和React融合的想法,但是 vuera只能解决非常基础的组件融合,并且存在插槽(children)和数据变更后的渲染性能问题,因此无法用于复杂的场景以及生产环境。

    vuereact-combined 将融合做到了极致,支持了大部分的Vue和React组件的功能,并且在渲染更新上使用了和vuera不同的思路,完美解决了渲染性能问题

    图片

    注意,该项目只支持使用 Vue 2,如果想要使用 Vue 3,可以使用上面的介绍的 Veaury。

    使用vuereact-combined的步骤如下。

    #安装插件

    在项目中安装vuereact-combined:

    npm install --save vuereact-combined
    
    • 1

    #项目配置

    在Vue和React的入口文件中引入 vuereact-combined

    import Vue from 'vue';  
    
    import React from 'react';  
    
    import {Combined} from 'vuereact-combined';  
    
    
    
    Vue.use(Combined);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    配置Babel以支持JSX语法和Vue.js的特性。安装babel-plugin-transform-vue-jsxbabel-preset-react,并在.babelrc文件中添加相应的配置:

    {  
    
      "presets": ["react-app"],  
    
      "plugins": ["@vue/babel-plugin-transform-vue-jsx"]  
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在webpack配置文件中添加相应的loaderplugin

    const VueLoaderPlugin = require('vue-loader/lib/plugin');  
    
    module.exports = function(webpackEnv) {  
    
      module: {  
    
        rules: [  
    
          {  
    
            test: /\.vue$/,  
    
            loader: 'vue-loader',  
    
          },  
    
          {  
    
            test: /\.js$/,  
    
            exclude: /node_modules\/(?!(vue|@vue\/.*)\/).*/,  
    
            use: {  
    
              loader: 'babel-loader',  
    
              options: {  
    
                presets: ['@babel/preset-env'],  
    
                plugins: ['@babel/plugin-transform-vue-jsx']  
    
              }  
    
            }  
    
          },  
    
          // 其他规则...  
    
        ],  
    
      },  
    
      plugins: [  
    
        new VueLoaderPlugin(),  
    
        // 其他插件...  
    
      ],  
    
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    配置完毕后,就可以在Vue和React之间进行快捷的集成了。

    #基本使用

    假设有一个React组件,它是一个简单的函数组件:

    // 来自React项目的组件
    
    const MyReactComponent = () => {
    
      return 
    Hello React!
    ; };
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可以在Vue项目中引入并使用这个组件。下面是一个使用vuereact-combined的Vue文件示例:

    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    这里,首先引入了MyReactComponent,然后在Vue组件中使用它。通过将React组件注册为Vue组件,我们可以在Vue模板中使用它,就像使用普通的Vue组件一样。

    这里只展示了最基本的使用方法,其他使用场景可以参考官方文档。

    #注意事项

    • 在Vue项目中使用第三方的React组件:第三方的react组件已经是通过babel进行过处理,不包含 React 的 jsx。此情况下,可以直接在项目中使用applyReactInVue对第三方的 React 组件进行处理。

    • 在React项目中使用第三方的Vue组件:第三方的Vue组件已经是通过vue-loader和babel进行过处理,不包含.vue文件以及Vue的jsx。此情况下,可以直接在项目中使用applyVueInReact对第三方的Vue组件进行处理。

    在 React 项目中引入Vue组件的支持程度:

    图片

    在 Vue 项目中引入 React 组件:

    图片

    Github: https://github.com/devilwjp/vuereact-combined

  • 相关阅读:
    【学习笔记】CF1456E XOR-ranges
    Greenplum数据库外部表——fileam封装
    大数据毕设选题 - 招聘岗位数据分析可视化(python 爬虫)
    Rust 从入门到精通03-helloworld
    数据可视化与GraphQL:利用Apollo创建仪表盘
    H5游戏开发-搭建开发环境
    有偿找IRT项目反应原理模型的朋友解答
    “搞事情”?OpenAl将于11月召开其首届开发者大会
    基于评论文本的自适应特征提取推荐研究
    原型模式简介
  • 原文地址:https://blog.csdn.net/qq_42033567/article/details/133248997