当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-18 21:42:10 465观看
导读VeauryVeaury 是一个基于 React 和 Vue3 的工具库,主要用于React和Vue在一个项目中公共使用的场景,主要运用在项目迁移、技术栈融合的开发模式、跨技术栈使用第三方组件的场景。Veaury的特点如下:同时支持Vue3和React,方

6x128资讯网——每日最新资讯28at.com

Veaury

Veaury 是一个基于 React 和 Vue3 的工具库,主要用于React和Vue在一个项目中公共使用的场景,主要运用在项目迁移、技术栈融合的开发模式、跨技术栈使用第三方组件的场景。6x128资讯网——每日最新资讯28at.com

Veaury的特点如下:6x128资讯网——每日最新资讯28at.com

  • 同时支持Vue3和React,方便在一个项目中公共使用。
  • 支持同一个应用中出现的vue组件和react组件的context共享。
  • 支持跨框架的hooks调用,可以在react组件中使用vue的hooks,也可以在vue组件中使用react的hooks。
  • 可以解决React和Vue在公共使用时的代码重复、冗余的问题。
  • 在一个应用中可以随意使用React或者Vue的第三方组件, 比如 antd, element-ui, vuetify。
  • 提供了详细的官方文档,包括英文版和中文版。

6x128资讯网——每日最新资讯28at.com

Veaury 的文档写的非常详细,这里就不再详细介绍其使用方式了。需要注意的是,Veaury 并不支持 Vue 2,如果需要使用Vue 2,可以使用下面要介绍的工具库。6x128资讯网——每日最新资讯28at.com

Github:https://github.com/devilwjp/veaury。6x128资讯网——每日最新资讯28at.com

Vuera

Vuera 是一个用于在 Vue 应用中使用 React 组件的库,同时也支持在 React 应用中使用 Vue 组件。它提供了一种方便的方式,使开发人员能够在不同的框架之间无缝地使用对方的组件。6x128资讯网——每日最新资讯28at.com

要在 Vue 应用中使用React组件,可以按照以下步骤使用Vuera。6x128资讯网——每日最新资讯28at.com

安装插件

安装Vuera:使用npm或yarn在您的Vue项目中安装Vuera库。6x128资讯网——每日最新资讯28at.com

// 使用 yarn 安装yarn add vuera// 使用 npm 安装npm i -S vuera

安装依赖。6x128资讯网——每日最新资讯28at.com

由于需要在Vue中使用React组件,所以首先需要在项目中安装 React,安装指令如下:6x128资讯网——每日最新资讯28at.com

npm install --save react react-dom

项目配置

在babel.config.js文件中添加以下配置即可:6x128资讯网——每日最新资讯28at.com

{  "presets": [    "react"  ],  "plugins": [    "vuera/babel"  ]}

接下来在项目中以插件的形式来引入并使用vuera库,可以在 main.js 中加入如下代码:6x128资讯网——每日最新资讯28at.com

import { VuePlugin } from 'vuera'Vue.use(VuePlugin)

基本使用

完成上述配置之后,就可以在Vue项目中引入并使用React组件了。6x128资讯网——每日最新资讯28at.com

React组件代码如下:6x128资讯网——每日最新资讯28at.com

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组件代码如下:6x128资讯网——每日最新资讯28at.com

<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 组件,效果如下:6x128资讯网——每日最新资讯28at.com

6x128资讯网——每日最新资讯28at.com

可以看到,这里实现了Vue到React组件的传值,并显示在了页面上。根据右上角的Chrome插件显示,这个项目中既使用了Vue又使用了React。6x128资讯网——每日最新资讯28at.com

点击页面中的按钮,可以看到,数据从React子组件传递到了Vue中:6x128资讯网——每日最新资讯28at.com

6x128资讯网——每日最新资讯28at.com

这样就简单实现了React和Vue组件之间的数据通信。6x128资讯网——每日最新资讯28at.com

其他使用方式

如果不想通过 Babel plugin 的方式引入的话,可以使用以下这两种方法。6x128资讯网——每日最新资讯28at.com

(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 组件也是同理,可以参考官方文档。6x128资讯网——每日最新资讯28at.com

注意

Vuera 是一个比较成熟的 JavaScrip 库,但是目前已经不再维护(最近一次更新是三年前)。并且,该库不支持 Vue 3,如果想要支持 Vue 3,可以使用 Vueury。6x128资讯网——每日最新资讯28at.com

Github:https://github.com/akxcv/vuera。6x128资讯网——每日最新资讯28at.com

#vuereact-combined

vuereact-combined 是一个用于 Vue和React快捷集成的工具包,并且适合复杂的集成场景。通过这个工具,可以在任何的Vue和React项目中使用另一个类型框架的组件,并且解决了复杂的集成问题。6x128资讯网——每日最新资讯28at.com

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

vuereact-combined 将融合做到了极致,支持了大部分的Vue和React组件的功能,并且在渲染更新上使用了和vuera不同的思路,完美解决了渲染性能问题6x128资讯网——每日最新资讯28at.com

6x128资讯网——每日最新资讯28at.com

注意,该项目只支持使用 Vue 2,如果想要使用 Vue 3,可以使用上面的介绍的 Veaury。6x128资讯网——每日最新资讯28at.com

使用vuereact-combined的步骤如下。6x128资讯网——每日最新资讯28at.com

#安装插件

在项目中安装vuereact-combined:6x128资讯网——每日最新资讯28at.com

npm install --save vuereact-combined

项目配置

在Vue和React的入口文件中引入 vuereact-combined:6x128资讯网——每日最新资讯28at.com

import Vue from 'vue';  import React from 'react';  import {Combined} from 'vuereact-combined';    Vue.use(Combined);

配置Babel以支持JSX语法和Vue.js的特性。安装babel-plugin-transform-vue-jsx和babel-preset-react,并在.babelrc文件中添加相应的配置:6x128资讯网——每日最新资讯28at.com

{    "presets": ["react-app"],    "plugins": ["@vue/babel-plugin-transform-vue-jsx"]  }

在webpack配置文件中添加相应的loader和plugin:6x128资讯网——每日最新资讯28at.com

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之间进行快捷的集成了。6x128资讯网——每日最新资讯28at.com

基本使用

假设有一个React组件,它是一个简单的函数组件:6x128资讯网——每日最新资讯28at.com

// 来自React项目的组件const MyReactComponent = () => {  return <div>Hello React!</div>;};

可以在Vue项目中引入并使用这个组件。下面是一个使用vuereact-combined的Vue文件示例:6x128资讯网——每日最新资讯28at.com

<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组件一样。6x128资讯网——每日最新资讯28at.com

这里只展示了最基本的使用方法,其他使用场景可以参考官方文档。6x128资讯网——每日最新资讯28at.com

注意事项

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

在 React 项目中引入Vue组件的支持程度:6x128资讯网——每日最新资讯28at.com

6x128资讯网——每日最新资讯28at.com

在 Vue 项目中引入 React 组件:
6x128资讯网——每日最新资讯28at.com

6x128资讯网——每日最新资讯28at.com

Github:https://github.com/devilwjp/vuereact-combined。6x128资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10482-0.html竟然可以在一个项目中混用 Vue 和 React?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Docker构建轻量级Linux容器

下一篇: 零拷贝并非万能解决方案:重新定义数据传输的效率极限

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克&middot;扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:&ldquo;不仅
Top