当前位置:首页 > 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 组件:

    // 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项目如何集成react

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

相关文章

vue怎么实现选中删除

vue怎么实现选中删除

实现选中删除功能的方法 在Vue中实现选中删除功能通常涉及以下几个关键步骤: 数据绑定与选中状态管理 使用v-model或v-for指令绑定列表数据,结合复选框或单选按钮实现选中状态管理。例如…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的Ca…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…