当前位置:首页 > 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 实现选择季度的几种方法 使用下拉选择框(Select) 在 Vue 中可以通过 v-model 绑定一个下拉选择框来实现季度选择。数据可以预先定义为一个包含季度选项的数组。 <…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 meth…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能通常需要结合输入框和列表渲染,通过监听输入内容动态过滤数据。以下是几种常见实现方式: 使用计算属性实现 计算属性适合处理需要响应式更新的搜索逻辑:…

vue实现伸缩

vue实现伸缩

Vue实现伸缩功能的方法 使用CSS过渡和Vue的v-if或v-show 通过CSS的transition属性结合Vue的条件渲染指令(v-if或v-show)可以实现元素的伸缩效果。定义一个CSS类…

vue实现刷新

vue实现刷新

Vue 实现页面刷新的方法 在Vue中实现页面刷新可以通过多种方式,以下是几种常见的方法: 使用 window.location.reload() 通过调用浏览器的原生方法强制刷新当前页面:…

vue实现卡片

vue实现卡片

Vue 实现卡片组件的方法 使用 Vue 实现卡片组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 在 Vue 单文件组件中,可以通过模板和样式直接实现卡片效果…