当前位置:首页 > React

vue项目如何集成react

2026-01-24 19:57:34React

在 Vue 项目中集成 React 的方法

可以通过微前端架构或直接嵌入 React 组件的方式实现 Vue 和 React 的混合开发。以下是两种常见的方法:

使用微前端框架(如 qiankun)

qiankun 是一个流行的微前端框架,支持 Vue 和 React 应用的混合集成。

  1. 主应用(Vue)配置
    在主应用中安装 qiankun:

    npm install qiankun

    在 Vue 的入口文件(如 main.js)中注册 React 子应用:

    import { registerMicroApps, start } from 'qiankun';
    
    registerMicroApps([
      {
        name: 'react-app',
        entry: '//localhost:7100', // React 子应用的入口地址
        container: '#react-container', // 挂载节点
        activeRule: '/react',
      },
    ]);
    
    start();
  2. 子应用(React)配置
    在 React 项目中导出生命周期钩子,确保能被 qiankun 正确加载:

    // public-path.js
    if (window.__POWERED_BY_QIANKUN__) {
      __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
    }
    
    // index.js
    import './public-path';
    import React from 'react';
    import ReactDOM from 'react-dom';
    
    function render(props) {
      const { container } = props;
      ReactDOM.render(<App />, container ? container.querySelector('#root') : document.getElementById('root'));
    }
    
    if (!window.__POWERED_BY_QIANKUN__) {
      render({});
    }
    
    export async function bootstrap() {}
    export async function mount(props) {
      render(props);
    }
    export async function unmount(props) {
      ReactDOM.unmountComponentAtNode(props.container ? props.container.querySelector('#root') : document.getElementById('root'));
    }

直接嵌入 React 组件

通过 @vue/babel-plugin-vue-jsxreact 依赖,直接在 Vue 中渲染 React 组件。

  1. 安装依赖
    在 Vue 项目中安装 React 相关依赖:

    npm install react react-dom @babel/preset-react
  2. 配置 Babel
    babel.config.js 中添加 React 的预设:

    module.exports = {
      presets: ['@vue/cli-plugin-babel/preset', '@babel/preset-react'],
    };
  3. 封装 React 组件
    创建一个 Vue 组件来渲染 React 组件:

    // ReactWrapper.vue
    <template>
      <div ref="reactContainer"></div>
    </template>
    
    <script>
    import React from 'react';
    import ReactDOM from 'react-dom';
    
    export default {
      props: {
        component: {
          type: Function,
          required: true,
        },
        props: {
          type: Object,
          default: () => ({}),
        },
      },
      mounted() {
        this.renderReactComponent();
      },
      methods: {
        renderReactComponent() {
          ReactDOM.render(
            React.createElement(this.component, this.props),
            this.$refs.reactContainer
          );
        },
      },
      beforeDestroy() {
        ReactDOM.unmountComponentAtNode(this.$refs.reactContainer);
      },
    };
    </script>
  4. 在 Vue 中使用 React 组件
    通过 ReactWrapper 组件加载 React 组件:

    vue项目如何集成react

    // App.vue
    <template>
      <div>
        <ReactWrapper :component="ReactComponent" :props="{ message: 'Hello from React!' }" />
      </div>
    </template>
    
    <script>
    import ReactWrapper from './ReactWrapper.vue';
    import ReactComponent from './ReactComponent.jsx';
    
    export default {
      components: { ReactWrapper },
      data() {
        return {
          ReactComponent,
        };
      },
    };
    </script>

注意事项

  • 样式隔离
    微前端方案中需注意 CSS 冲突问题,可通过 Shadow DOM 或 CSS 命名空间隔离样式。
  • 版本兼容性
    确保 React 和 Vue 的版本兼容,避免因依赖冲突导致运行错误。
  • 性能优化
    混合开发可能增加打包体积,需合理配置代码分割(Code Splitting)以减少加载时间。

以上方法可根据项目需求选择,微前端适合大型应用拆分,直接嵌入适合小规模功能扩展。

标签: 项目vue
分享给朋友:

相关文章

vue实现扫描二维码

vue实现扫描二维码

实现 Vue 扫描二维码功能 在 Vue 中实现扫描二维码功能,可以通过第三方库或原生 API 完成。以下是两种常见方法: 使用 vue-qrcode-reader 库 vue-qrcode-rea…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现波形

vue实现波形

实现波形效果的方法 在Vue中实现波形效果可以通过多种方式完成,常见的方法包括使用Canvas绘制、CSS动画或第三方库。以下是几种实现方案: 使用Canvas绘制波形 通过Canvas API动态…

前端vue实现概率

前端vue实现概率

Vue实现概率功能的方法 在Vue中实现概率功能通常涉及随机数生成和概率计算。以下是几种常见实现方式: 基础概率实现 使用Math.random()生成0到1之间的随机数,与设定概率比较: con…

vue实现type切换

vue实现type切换

Vue 实现 Type 切换的实现方法 在 Vue 中实现 Type 切换功能可以通过动态组件、条件渲染或路由切换等方式实现。以下是几种常见方法: 使用 v-if 或 v-show 条件渲染 通过绑…