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

这篇具有很好参考价值的文章主要介绍了竟然可以在一个项目中混用 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. 安装依赖

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

npm install --save react react-dom

#项目配置

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

{

  "presets": [

    "react"

  ],

  "plugins": [

    "vuera/babel"

  ]

}

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

import { VuePlugin } from 'vuera'

Vue.use(VuePlugin)

#基本使用

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

React组件代码如下:

import React from 'react'



function myReactComponent(props) {

  const { message } = props

  function childClickHandle() {

    props.onMyEvent('React子组件传递的数据')

  }

  return (

    <div>

      <h2>{ message }</h2>

      <button onClick={ childClickHandle }>向Vue项目传递React子组件的数据</button>

    </div>

  )

}



export default myReactComponent

Vue组件代码如下:

<template>

    <div>

        <h1>I'm a Vue component</h1>

        <my-react-component :message="message" @onMyEvent="parentClickHandle"/>

    </div>

</template>



<script>

    // 引入React组件

    import MyReactComponent from './myReactComponent'



    export default {

        components: {

            'my-react-component': MyReactComponent  // 引入React组件

        },

        data() {

            return {

                message: 'Hello from React!',

            }

        },

        methods: {

            parentClickHandle(data){

                console.log(data);

            }

        },

    }

</script>

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

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

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

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

#其他使用方式

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

<template>

  <div>

    <react :component="component" :message="message" />

  </div>

</template>

 

<script>

  import { ReactWrapper } from 'vuera'  // 引入vuera库

  import MyReactComponent from './MyReactComponent'  // 引入react组件

 

  export default {

    data () {

      component: MyReactComponent,

      message: 'Hello from React!',

    },

    components: { react: ReactWrapper }

  }

</script>

(2)使用高阶组件的API

<template>

  <div>

    <my-react-component :message="message" />

  </div>

</template>

 

<script>

  import { ReactWrapper } from 'vuera'  // 引入vuera库

  import MyReactComponent from './MyReactComponent'  // 引入react组件

 

  export default {

    data () {

      message: 'Hello from React!',

    },

    components: { 'my-react-component': ReactInVue(MyReactComponent) }

  }

</script>

在 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

#项目配置

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

import Vue from 'vue';  

import React from 'react';  

import {Combined} from 'vuereact-combined';  

  

Vue.use(Combined);

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

{  

  "presets": ["react-app"],  

  "plugins": ["@vue/babel-plugin-transform-vue-jsx"]  

}

在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(),  

    // 其他插件...  

  ],  

};

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

#基本使用

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

// 来自React项目的组件

const MyReactComponent = () => {

  return <div>Hello React!</div>;

};

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

<template>

  <div>

    <MyReactComponent />

  </div>

</template>



<script>

import {Combined} from 'vuereact-combined';

import MyReactComponent from './MyReactComponent'; // 引入React组件



export default {

  components: {

    Combined,

    MyReactComponent // 将React组件注册为Vue组件

  },

  // 其他Vue代码...

};

</script>

这里,首先引入了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

竟然可以在一个项目中混用 Vue 和 React?文章来源地址https://www.toymoban.com/news/detail-710111.html

到了这里,关于竟然可以在一个项目中混用 Vue 和 React?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • react 第一个项目

    npx node.js工具 create-react-app 核心包(固定写法)用于创建react项目 后跟项目名层 启动一个新的 React 项目 – React 中文文档    遇到的问题   保存 \\\"App.js\\\"失败: 权限不足。选择 \\\"以超级用户身份重试\\\" 以超级用户身份重试。  sudo chown -Rv 用户名 项目路径 JSX 是javascript 和xml (html

    2024年01月19日
    浏览(27)
  • react学习(一)之初始化一个react项目

    React 是一个用于构建用户界面(UI)的 JavaScript 库,用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件 。从 web 端网站到移动端应用,屏幕上的所有内容都可以被分解成组件,即,可由react构建。 A JAVASCRIPT LIBRARY FOR BUILDING

    2024年04月26日
    浏览(27)
  • 桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!

    前言 前段时间,用PyQt5写了几篇文章,关于Python自制一款炫酷音乐播放器、自定义桌面动画挂件、车牌自动识别系统。今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣! 首先一起来看看最终实现的自定义动态壁纸效果

    2023年04月25日
    浏览(241)
  • 创建一个 React+Typescript 项目

    接下来 我们来一起探索一下用TypeScript 来编写react 这也是一个非常好的趋势,目前也非常多人使用 那么 我们就先从创建项目开始 首先 我们先找一个 或者 之前创建一个目录 用来放我们的项目 然后 在这个目录下直接输入 例如 这里 我想创建一个叫 tsReApp 的项目就可以输入

    2024年02月13日
    浏览(31)
  • 从零搭建一个react + electron项目

    最近打算搭建一个react + electron的项目,发现并不是那么傻瓜式 于是记录一下自己的实践步骤 通过create-react-app 创建react项目 安装electron依赖 暴露react项目的配置文件 (这一步看自己需求,我需要改目录结构) 在package.json中有一个eject命令,直接执行就可以,执行前要保证没

    2024年02月14日
    浏览(27)
  • react当我们有两个完全不相关的组件想要通信时,就可以利用这种模式,其中一个组件负责订阅某个消息,而另一个元素则负责发送这个消息。使用Context配合

    在nextjs项目中,发现两个组件没啥关系,例如一个是一直存在的头部组件,另一个是页面中的组件,当我点击头部组件中的特定按钮时,把数据传递到页面组件中,页面组件接受到canshu数据后在做其他操作,那么他们两个如何通讯,通过context配合观察者模式实现。 首先在其

    2024年02月15日
    浏览(42)
  • Vue与React更应该学哪一个

    Vue和React都是当前最流行的前端框架之一。但是对于那些新手来说,很难决定哪一个框架更适合自己。本文将对Vue和React进行详细介绍和比较,以帮助你更好地选择一个框架。 一、Vue.js Vue是由中国大陆程序员尤雨溪所开发的一个渐进式JavaScript框架,已经成为最流行的前端框架

    2024年02月05日
    浏览(20)
  • 一个 println 竟然比 volatile 还好使?

    前两天一个小伙伴突然找我求助,说准备换个坑,最近在系统复习多线程知识,但遇到了一个刷新认知的问题…… 小伙伴:Effective JAVA 里的并发章节里,有一段关于可见性的描述。下面这段代码会出现死循环,这个我能理解,JMM 内存模型嘛,JMM 不保证 stopRequested 的修改能被

    2024年02月08日
    浏览(24)
  • react项目中自定义一个markdown编辑器

    Markdown 是一种轻量级标记语言。 Markdown是一种简单的格式化文本的方法,在任何设备上看起来都很棒。它不会做任何花哨的事情,比如改变字体大小、颜色或类型——只是基本的,使用你已经知道的键盘符号。 它还允许人们使用易读易写的纯文本格式编写文档,然后转换成有

    2023年04月18日
    浏览(67)
  • 一个实用的开源项目,可以快速将 Elasticsearch 数据导出到 csv

    -e, --meta-fields Add meta-fields in output. –verify-certs Verify SSL certificates. Default is False. –ca-certs CA_CERTS Location of CA bundle. –client-cert CLIENT_CERT Location of Client Auth cert. –client-key CLIENT_KEY Location of Client Cert Key. -v, --version Show version and exit. –debug Debug mode on. -h, --help show this help message and ex

    2024年04月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包