国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

竟然可以在一個(gè)項(xiàng)目中混用 Vue 和 React?

開(kāi)發(fā) 前端
React和Vue是前端開(kāi)發(fā)中的兩大熱門框架,各自都有著強(qiáng)大的功能和豐富的生態(tài)系統(tǒng)。然而,你有沒(méi)有想過(guò),在一個(gè)項(xiàng)目中同時(shí)使用React和Vue?是的,你沒(méi)有聽(tīng)錯(cuò),可以在同一個(gè)項(xiàng)目中混用這兩個(gè)框架!本文就來(lái)分享 3 個(gè)用于混合使用 React 和 Vue 的工具!

Veaury

Veaury 是一個(gè)基于 React 和 Vue3 的工具庫(kù),主要用于React和Vue在一個(gè)項(xiàng)目中公共使用的場(chǎng)景,主要運(yùn)用在項(xiàng)目遷移、技術(shù)棧融合的開(kāi)發(fā)模式、跨技術(shù)棧使用第三方組件的場(chǎng)景。

Veaury的特點(diǎn)如下:

  • 同時(shí)支持Vue3和React,方便在一個(gè)項(xiàng)目中公共使用。
  • 支持同一個(gè)應(yīng)用中出現(xiàn)的vue組件和react組件的context共享。
  • 支持跨框架的hooks調(diào)用,可以在react組件中使用vue的hooks,也可以在vue組件中使用react的hooks。
  • 可以解決React和Vue在公共使用時(shí)的代碼重復(fù)、冗余的問(wèn)題。
  • 在一個(gè)應(yīng)用中可以隨意使用React或者Vue的第三方組件, 比如 antd, element-ui, vuetify。
  • 提供了詳細(xì)的官方文檔,包括英文版和中文版。

Veaury 的文檔寫的非常詳細(xì),這里就不再詳細(xì)介紹其使用方式了。需要注意的是,Veaury 并不支持 Vue 2,如果需要使用Vue 2,可以使用下面要介紹的工具庫(kù)。

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

Vuera

Vuera 是一個(gè)用于在 Vue 應(yīng)用中使用 React 組件的庫(kù),同時(shí)也支持在 React 應(yīng)用中使用 Vue 組件。它提供了一種方便的方式,使開(kāi)發(fā)人員能夠在不同的框架之間無(wú)縫地使用對(duì)方的組件。

要在 Vue 應(yīng)用中使用React組件,可以按照以下步驟使用Vuera。

安裝插件

安裝Vuera:使用npm或yarn在您的Vue項(xiàng)目中安裝Vuera庫(kù)。

// 使用 yarn 安裝
yarn add vuera

// 使用 npm 安裝
npm i -S vuera

安裝依賴。

由于需要在Vue中使用React組件,所以首先需要在項(xiàng)目中安裝 React,安裝指令如下:

npm install --save react react-dom

項(xiàng)目配置

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

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

接下來(lái)在項(xiàng)目中以插件的形式來(lái)引入并使用vuera庫(kù),可以在 main.js 中加入如下代碼:

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

基本使用

完成上述配置之后,就可以在Vue項(xiàng)目中引入并使用React組件了。

React組件代碼如下:

import React from 'react'

function myReactComponent(props) {
  const { message } = props
  function childClickHandle() {
    props.onMyEvent('React子組件傳遞的數(shù)據(jù)')
  }
  return (
    <div>
      <h2>{ message }</h2>
      <button onClick={ childClickHandle }>向Vue項(xiàng)目傳遞React子組件的數(shù)據(jù)</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 項(xiàng)目中引入了這個(gè) React 組件,效果如下:

可以看到,這里實(shí)現(xiàn)了Vue到React組件的傳值,并顯示在了頁(yè)面上。根據(jù)右上角的Chrome插件顯示,這個(gè)項(xiàng)目中既使用了Vue又使用了React。

點(diǎn)擊頁(yè)面中的按鈕,可以看到,數(shù)據(jù)從React子組件傳遞到了Vue中:

這樣就簡(jiǎn)單實(shí)現(xiàn)了React和Vue組件之間的數(shù)據(jù)通信。

其他使用方式

如果不想通過(guò) Babel plugin 的方式引入的話,可以使用以下這兩種方法。

(1)使用wrapper組件

<template>
  <div>
    <react :component="component" :message="message" />
  </div>
</template>
 
<script>
  import { ReactWrapper } from 'vuera'  // 引入vuera庫(kù)
  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庫(kù)
  import MyReactComponent from './MyReactComponent'  // 引入react組件
 
  export default {
    data () {
      message: 'Hello from React!',
    },
    components: { 'my-react-component': ReactInVue(MyReactComponent) }
  }
</script>

在 React 項(xiàng)目中使用 Vue 組件也是同理,可以參考官方文檔。

注意

Vuera 是一個(gè)比較成熟的 JavaScrip 庫(kù),但是目前已經(jīng)不再維護(hù)(最近一次更新是三年前)。并且,該庫(kù)不支持 Vue 3,如果想要支持 Vue 3,可以使用 Vueury。

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

#vuereact-combined

vuereact-combined 是一個(gè)用于 Vue和React快捷集成的工具包,并且適合復(fù)雜的集成場(chǎng)景。通過(guò)這個(gè)工具,可以在任何的Vue和React項(xiàng)目中使用另一個(gè)類型框架的組件,并且解決了復(fù)雜的集成問(wèn)題。

vuera 開(kāi)辟了Vue和React融合的想法,但是 vuera只能解決非常基礎(chǔ)的組件融合,并且存在插槽(children)和數(shù)據(jù)變更后的渲染性能問(wèn)題,因此無(wú)法用于復(fù)雜的場(chǎng)景以及生產(chǎn)環(huán)境。

vuereact-combined 將融合做到了極致,支持了大部分的Vue和React組件的功能,并且在渲染更新上使用了和vuera不同的思路,完美解決了渲染性能問(wèn)題

注意,該項(xiàng)目只支持使用 Vue 2,如果想要使用 Vue 3,可以使用上面的介紹的 Veaury。

使用vuereact-combined的步驟如下。

#安裝插件

在項(xiàng)目中安裝vuereact-combined:

npm install --save vuereact-combined

項(xiàng)目配置

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

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

配置Babel以支持JSX語(yǔ)法和Vue.js的特性。安裝babel-plugin-transform-vue-jsx和babel-preset-react,并在.babelrc文件中添加相應(yīng)的配置:

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

在webpack配置文件中添加相應(yīng)的loader和plugin:

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']  
          }  
        }  
      },  
      // 其他規(guī)則...  
    ],  
  },  
  plugins: [  
    new VueLoaderPlugin(),  
    // 其他插件...  
  ],  
};

配置完畢后,就可以在Vue和React之間進(jìn)行快捷的集成了。

基本使用

假設(shè)有一個(gè)React組件,它是一個(gè)簡(jiǎn)單的函數(shù)組件:

// 來(lái)自React項(xiàng)目的組件
const MyReactComponent = () => {
  return <div>Hello React!</div>;
};

可以在Vue項(xiàng)目中引入并使用這個(gè)組件。下面是一個(gè)使用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組件注冊(cè)為Vue組件
  },
  // 其他Vue代碼...
};
</script>

這里,首先引入了MyReactComponent,然后在Vue組件中使用它。通過(guò)將React組件注冊(cè)為Vue組件,我們可以在Vue模板中使用它,就像使用普通的Vue組件一樣。

這里只展示了最基本的使用方法,其他使用場(chǎng)景可以參考官方文檔。

注意事項(xiàng)

  • 在Vue項(xiàng)目中使用第三方的React組件:第三方的react組件已經(jīng)是通過(guò)babel進(jìn)行過(guò)處理,不包含 React 的 jsx。此情況下,可以直接在項(xiàng)目中使用applyReactInVue對(duì)第三方的 React 組件進(jìn)行處理。
  • 在React項(xiàng)目中使用第三方的Vue組件:第三方的Vue組件已經(jīng)是通過(guò)vue-loader和babel進(jìn)行過(guò)處理,不包含.vue文件以及Vue的jsx。此情況下,可以直接在項(xiàng)目中使用applyVueInReact對(duì)第三方的Vue組件進(jìn)行處理。

在 React 項(xiàng)目中引入Vue組件的支持程度:

在 Vue 項(xiàng)目中引入 React 組件:

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

責(zé)任編輯:姜華 來(lái)源: 前端充電寶
相關(guān)推薦

2015-08-03 11:45:37

storyboard

2022-02-21 08:15:15

Go項(xiàng)目語(yǔ)言

2024-12-09 00:00:03

Vue3項(xiàng)目表單

2022-04-27 05:55:43

去QA化自動(dòng)化測(cè)試開(kāi)發(fā)

2021-09-16 09:38:12

開(kāi)發(fā)項(xiàng)目代碼

2021-08-04 08:27:00

VueReact自動(dòng)化部署

2024-03-04 00:00:00

GolangNode.js性能

2019-03-25 10:30:19

開(kāi)發(fā)技能代碼

2024-11-29 09:41:17

2023-10-08 07:54:13

printlnJITJVM

2020-03-09 09:07:51

Vue根節(jié)點(diǎn)Fragments

2023-10-06 11:48:37

reactvuenodejs

2021-08-08 21:17:18

管理配置平臺(tái)

2023-01-18 07:49:42

2021-06-02 08:00:57

WebAsyncTas項(xiàng)目異步

2024-12-11 09:13:00

2024-07-26 10:47:10

2023-03-13 08:09:03

Protobuffeature分割

2025-06-18 08:16:26

2017-07-04 19:02:17

ReacRedux 項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美特级aaa| 超碰在线最新| av成人综合| 成人黄色av网站在线| 亚洲精品久久久久久久久| 国产欧美在线一区二区| 青青草在线播放| 99久久综合狠狠综合久久aⅴ| 亚洲女性喷水在线观看一区| 国内精品久久久久久| 国产免费视频传媒| 欧美特黄不卡| 中文字幕成人在线观看| 精品一二线国产| 久久综合av免费| 欧美日韩福利视频| 久久综合久久色| 国产香蕉精品| 亚洲精品福利视频网站| 国产成人鲁鲁免费视频a| 色婷婷综合网站| 亚洲电影男人天堂| 亚洲伊人色欲综合网| 国产精品专区一| 久操视频在线观看| 国产乱人伦偷精品视频不卡| 中文字幕亚洲国产| 色播五月综合网| 深爱激情久久| 色播五月激情综合网| 免费日韩电影在线观看| 中文字幕在线直播| 国产精品久久久久久久久搜平片| 国产aaa精品| 成人黄色网址| 国产一区二区三区免费观看| 欧美激情在线有限公司| 亚洲pron| 国产麻豆午夜三级精品| 91sa在线看| 日本最新在线视频| 99精品欧美一区二区蜜桃免费| 久久久久久久91| 中文字幕在线播放| 成人小视频免费观看| 国产精品一区二区久久| 91极品在线| 久久久综合网站| 久久超碰亚洲| 亚洲福利合集| 欧美少妇xxx| 国产亚洲综合视频| 中文字幕一区二区三区乱码图片| 日韩av在线最新| 少妇**av毛片在线看| 日韩中文字幕91| 欧美最猛性xxxxx免费| 免费网站在线观看人| 亚洲女同一区二区| gogogo免费高清日本写真| 国产尤物久久久| 亚洲欧美日韩中文在线| 日韩成人黄色| 亚洲国产精品成人综合| 精品久久久久亚洲| 国产精品一区二区av交换| 99国产精品久久久久久久成人热| 欧美在线一二三| 天天干天天操天天做| 久久国产成人午夜av影院| 91网站免费观看| 中文字幕一区二区三区四区久久| 日韩欧美国产1| 国产在线观看免费| 亚洲精品第一国产综合野| 国产精品成人久久电影| 香蕉av777xxx色综合一区| 国产精品久久久久91| 色综合久久久| 日韩精品在线第一页| 超碰国产在线| 色婷婷久久一区二区三区麻豆| 天天爽夜夜爽一区二区三区| 国产一区二区三区在线看麻豆| 亚洲a在线观看| 欧美高清在线| 18久久久久久| 超碰精品在线| 欧美激情2020午夜免费观看| 羞羞视频在线观看一区二区| 精品丝袜一区二区三区| 久草在线视频福利| 777奇米成人网| av在线官网| 亚洲国产精品va在线看黑人动漫| 一区二区在线高清视频| 国产专区视频| 久久网站热最新地址| 一个人看的免费网站www视频| 在线观看亚洲a| 韩国成人漫画| 91性高湖久久久久久久久_久久99| 老牛嫩草一区二区三区日本| 成人免费在线小视频| 精品日本高清在线播放| 小视频免费在线观看| 91精品国产91久久久久久| 99国产精品视频免费观看一公开| av电影天堂一区二区在线| 午夜免费福利在线| 91精品办公室少妇高潮对白| 日韩精品1区2区3区| 色综合久久66| 免费高清完整在线观看| 婷婷久久综合九色综合伊人色| 爱情岛论坛亚洲品质自拍视频网站| 午夜精品一区二区三区视频免费看| 久久不射网站| 午夜在线不卡| 欧美另类极品videosbest最新版本 | 麻豆一区二区| 欧美福利精品| 一区二区三区在线看| 免费v片在线观看| 亚洲影院色无极综合| 91麻豆国产福利在线观看| 呦呦在线视频| 青青草精品毛片| 99久久国产综合色|国产精品| xxxxx日韩| 91爱爱小视频k| 高清不卡在线观看| 国产1区在线| 成人在线视频网| 国产欧美一区二区精品性色超碰| 91小视频xxxx网站在线| 国产欧美在线视频| www.视频一区| 国产乱肥老妇国产一区二| 精品一区二区三区中文字幕老牛| 国产av无码专区亚洲精品| 亚洲美女视频网| 精品一区二区综合| 亚洲一级少妇| 欧美高清中文字幕| 久久精品91久久香蕉加勒比| 9i在线看片成人免费| 性欧美高清come| 欧美一乱一性一交一视频| 成人av在线电影| 国产精品一区二区欧美| 99re这里只有精品6| 日本在线天堂| 国产999精品久久久影片官网| 美女久久久精品| 国产露出视频在线观看| 欧美大片在线免费观看| 青娱乐精品视频| 欧美美乳在线| 国产精品一区久久久| 久久久蜜桃精品| 亚洲色图官网| 久久久久综合一区二区三区| 亚洲妇熟xx妇色黄| 成人高潮a毛片免费观看网站| 最新欧美日韩亚洲| 精品欧美黑人一区二区三区| 天天射天天综合网| 最近2018中文字幕免费在线视频| 久久手机精品视频| 91小视频免费观看| 人人玩人人添人人澡欧美| 久久久久久av无码免费网站下载| 日韩欧美在线不卡| 亚洲日本黄色| 日本电影在线观看网站| 成人在线免费观看视视频| 亚洲成人av资源| 国产精品久久久久久久久| jizz在线观看中文| 国产精品99久久久久久人| 国产精品午夜久久| 日本成人精品| 久久久久免费精品| 久久久亚洲福利精品午夜| 国产精品视频一二三区| 粉嫩精品导航导航| 中文字幕www| 国产精品日韩久久久久| 亚洲精品国产a| 第一sis亚洲原创| 男人av在线| 欧洲久久久久久| 亚洲电影免费观看高清| 国产高清一区日本| 国产一区二区三区免费在线| jizz亚洲大全| 亚洲a级在线观看| 日韩精品一区在线| k8久久久一区二区三区|