react專案中如何執行vue元件?方法介紹

2022-04-11 22:00:07
react專案中如何執行元件?下面本篇文章就通過範例給大家介紹一下在react專案中執行vue元件的方法,希望對大家有所幫助!

此文的背景源於面試中,被問到,vue和react元件假如需要互通和複用,如何優雅的實現?

除了,開發者手動轉程式碼外。目前,我能想到的就2種解決方案

  • 方案一:vue程式碼和react程式碼互轉(元件庫同步)

  • 方案二:直接讓vue元件在React專案中執行,反之也可以。

【相關推薦:Redis視訊教學、】

先看實現效果

1.png

vue元件在reat中正常渲染了,並且我還點選了按鈕 3下vue的響應和render也都正常

具體如何實現?

實現原理

  • 引入vue的完整版(考慮效能的話,可以按需引入)

  • 等到componentDidMount階段,掛載好<div id="vueApp" />

  • new Vue(..).$mount('#vueApp')

import Vue from 'vue/dist/vue.min.js' // 引入完整版,否則不能解析vue的元件物件語法
export default class App extends Component {
  constructor(props) {
    super(props)
  }
  
  componentDidMount() {
    const Foo = {
      template: `
        <div>
          <h1>我是vue : {{aaa}}</h1>
          <h1>我是vue : {{aaa}}</h1>
          <h1>我是vue : {{aaa}}</h1>
          <button @click="aaa++">按鈕</button>
        </div>
      `,
      data () {
        return {
          aaa: 2222
        }
      }
    }
    new Vue({
      render: h => h(Foo),
    }).$mount('#vueApp')
  }

  render() {
    return (
      <div>
        <h1>當前是react專案內</h1>
        <h1>當前是react專案內</h1>
        以下將渲染vue元件
        <div id="vueApp" />
      </div>
    )
  }
}

注意:

如果只需支援vue的元件選項物件的話,那麼不用設定webpack,就完了

vue的元件選項物件 指的是:

const Foo = { 
    template: ` 
        <div> 
            <h1>我是vue : {{aaa}}</h1>
            <h1>我是vue : {{aaa}}</h1> 
            <h1>我是vue : {{aaa}}</h1> 
            <button @click="aaa++">按鈕</button> 
        </div> 
    `, 
    data () { 
        return { 
            aaa: 2222 
        } 
    } 
}

高階版

此處高階版指的是:需要支援 .vue檔案/元件(上面的demo,直接是元件選項物件,沒有.vue檔案)

比如:(繼續用上面的demo,改幾行)

  • 改成了引入.vue檔案: import Foo from "./Foo.vue";
import Vue from 'vue/dist/vue.min.js' // 引入完整版,否則不能解析vue的元件物件語法
import Foo from "./Foo.vue";
export default class App extends Component {
  ...
  
  componentDidMount() {
    new Vue({
      render: h => h(Foo),
    }).$mount('#vueApp')
  }

  ...
}

此時要想生效,需要設定vue-loader

  • 官網:https://vue-loader.vuejs.org/guide/#manual-setup
// 在 webpack.config.js 內
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
  mode: 'development',
  module: {
    rules: [
      {
        test: /.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    // make sure to include the plugin for the magic
    new VueLoaderPlugin()
  ]
}

注意點

  • 建議大家test的時候,不要用react的腳手架起的專案,用從零設定webpack.config.js的react專案

  • 我當前用最新版的腳手架時,run eject後,去往 webpack.config.js 裡面寫會報錯,因為 VueLoaderPlugin 不相容一個 oneOf的語法

  • 如果不用解析.vue檔案的話,直接用vue的元件選項物件語法的話,那麼不用額外的設定vue-loader

總結

  • 建議大家test的時候,不要用react的腳手架起的專案,用從零設定webpack.config.js的react專案

  • 如果不用解析.vue檔案的話,直接用vue的元件選項物件語法的話,那麼不用額外的設定vue-loader

最終在對比一下,vue專案中使用react元件,和, react專案中使用vue元件,設定上的區別!


一定需要設定webpack.config.js的loader嗎?
在vue專案中使用react元件yes,需設定babel-loader編譯.jsx檔案,需要額外注意配babel-loader的option選項
在react專案中使用vue元件no,如果不用解析.vue檔案的話,直接用vue的元件選項物件語法的話,那麼不用額外的設定vue-loader。需要支援.vue檔案的話,需要配vue-loader

本文轉載自:https://juejin.cn/post/7083303446161391623

作者:bigtree

更多程式設計相關知識,請存取:!!

以上就是react專案中如何執行vue元件?方法介紹的詳細內容,更多請關注TW511.COM其它相關文章!