当前位置:首页 > 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 子应用:

    vue项目如何集成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 相关依赖:

    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 组件:

    // 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 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm insta…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keywor…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…