React 18 配置 QianKun:主应用【React 18】+ 微应用【React 18】

一、搭建主应用

使用命令,依靠脚手架创建 react18 项目

create-react-app react-main-qiankun

安装Antd

npm install antd –-save

安装react-router

npm i react-router-dom

安装qiankun

 npm i qiankun --save

主应用版本信息:

"antd": "^5.10.0",
"qiankun": "^2.10.13",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.16.0",

安装完毕后,对主应用进行相关代码配置:

1、在 index.js 中引入 antd、react-router

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from "react-router-dom";
import { ConfigProvider } from "antd";
import zhCN from "antd/locale/zh_CN";
import "antd/dist/reset.css";

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <BrowserRouter>
        <ConfigProvider locale={zhCN}>
            <React.StrictMode>
                <App />
            </React.StrictMode>
        </ConfigProvider>
    </BrowserRouter>
);

reportWebVitals();

2、主应用中注册微应用,在 index.js中引入

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from "react-router-dom";
import { ConfigProvider } from "antd";
import zhCN from "antd/locale/zh_CN";
import "antd/dist/reset.css";
import { registerMicroApps, start } from "qiankun";

registerMicroApps([
    {
        name: "react-micro-application", // 子应用的名称,必须唯一。
        entry: "//localhost:3011", // 子应用项目本地运行地址
        container: "#container", //  子应用的容器(子应用嵌入到主项目id为container的容器)
        activeRule: "/react-micro1", // 子应用激活时的路由规则(子应用路由)
        props: { // 向子应用传参
            state: false,
            userId: 'userId',
            token: '18145EWDFDEdsefEFFfdDFf145454'
        }
    },
]);

start();

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <BrowserRouter>
        <ConfigProvider locale={zhCN}>
            <React.StrictMode>
                <App />
            </React.StrictMode>
        </ConfigProvider>
    </BrowserRouter>
);

reportWebVitals();

3、修改APP.js文件,配置简单的样式

import React from 'react';
import { Layout, Menu } from 'antd';
import { VideoCameraOutlined } from "@ant-design/icons";
import {NavLink} from "react-router-dom";
const { Header, Content, Footer, Sider } = Layout;

const App = () => {
    return (
        <Layout>
            <Header
                style={{
                    display: 'flex',
                    alignItems: 'center',
                }}
            >
                <div className="demo-logo" ><h1 style={{color: '#fff'}}>名称</h1></div>
                <Menu
                    theme="dark"
                    mode="horizontal"
                    defaultSelectedKeys={['1']}
                    items={[
                        {
                            key: "1",
                            icon: <VideoCameraOutlined />,
                            label: <NavLink to="/react-micro1">react 1 应用</NavLink>,
                        },
                        {
                            key: "2",
                            icon: <VideoCameraOutlined />,
                            label: <NavLink to="/react-micro2">react 2 应用</NavLink>,
                        },
                    ]}
                />
            </Header>
            <Content style={{height: 'calc(100vh - 128px)', backgroundColor: '#b4efe1'}} id={'container'}>
                <h1>主应用显示容器</h1>
            </Content>
            <Footer style={{textAlign: 'center',}}>
                Ant Design ©2023 Created by Ant UED
            </Footer>
        </Layout>
    );
};
export default App;

如图:

image.png

二、创建微应用

创建项目及引入依赖与主应用一致,这里不做过多赘述。
应用及依赖创建完,除 quankun 其他的配置后,对微应用进行qiankun配置:
1、在src文件夹下创建public-path.js,配置为:

if (window.__POWERED_BY_QIANKUN__) {
  // eslint-disable-next-line no-undef
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

2、修改webpack配置,安装craco:

npm i @craco/craco --save

3、在项目根目录下创建craco.config.js,配置为:

const { name } = require("./package");

module.exports = {
  webpack: {
    configure: (webpackConfig) => {
      webpackConfig.output.library = `${name}-[name]`;
      webpackConfig.output.libraryTarget = "umd";
      webpackConfig.output.chunkLoadingGlobal = `webpackJsonp_${name}`;
      return webpackConfig;
    },
  },
  devServer: (devServerConfig) => {
    devServerConfig.historyApiFallback = true;
    devServerConfig.open = false;
    devServerConfig.hot = false;
    devServerConfig.watchFiles = [];
    devServerConfig.headers = {
      "Access-Control-Allow-Origin": "*",
    };
    return devServerConfig;
  },
};

4、修改package.json

"scripts": {
  "start": "set PORT=3011 && craco start",
  "build": "craco build",
  "test": "craco test",
  "eject": "react-scripts eject"
},

5、修改public文件夹下index.html

<body>
  <noscript>You need to enable JavaScript to run this app.</noscript>
  <div id="appRoot"></div>
</body>

6、修改index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from "react-router-dom";

import "./public-path";

let root = null;
function render (props) {
    const { container } = props;
    root = root || ReactDOM.createRoot(container ? container.querySelector("#appRoot") : document.getElementById("appRoot") );
    root.render(
        <BrowserRouter basename={window.__POWERED_BY_QIANKUN__ ? "/react-micro1" : "/"}>
            <React.StrictMode>
                <App />
            </React.StrictMode>
        </BrowserRouter>
    );
}

if (!window.__POWERED_BY_QIANKUN__) {
    render({});
}

export async function bootstrap () {
    console.log("[react18] react app bootstraped");
}

export async function mount (props) {
    console.log("[react18] props from main framework", props);
    render(props);
}

export async function unmount (props) {
    root.unmount();
    root = null;
}

reportWebVitals();

7、修改app.js

import './App.css';
import {Layout, Menu} from "antd";
const { Content, Sider } = Layout;

function App() {
  return (
    <div className="App" id={'container'}>
        <Layout style={{padding: '24px 0',}}>
            <Sider width={200}>
                <Menu
                    mode="inline"
                    defaultSelectedKeys={['1']}
                    style={{height: '100%'}}
                    items={[
                        {
                            key: 111,
                            label: '微应用1-菜单1'
                        },
                        {
                            key: 222,
                            label: '微应用1-菜单2'
                        },
                        {
                            key: 333,
                            label: '微应用1-菜单3'
                        }
                    ]}
                />
            </Sider>
            <Content
                style={{
                    padding: '0 24px',
                    minHeight: 666,
                }}
            >
                Content
            </Content>
        </Layout>
    </div>
  );
}

export default App;

效果如图:

image.png

到此为止,主应用与微应用配置基本结束,通过主应用点击菜单“react 1 应用”,可将微应用内容在主应用内展示,下面看效果图:

image.png

注意事项

1、主应用注意事项:

image.png

在主应用的registerMicroApps函数内,container的值,需要与app.js内容器属性id的值一致,否则会报错,activeRule的值需要与配置的Meun菜单路径一致,否则会找不到相关应用。

2、微应用注意事项:
  1. 当创建多个微应用时,publicindex.htmlid尽量不要重复,相关id修改后,要同步修改src文件下index.jsrender函数内部的querySelector函数及getElementById函数所传值。
  2. 微应用src文件下index.js中的<BrowserRouter basename={window.__POWERED_BY_QIANKUN__ ? "/react-micro1" : "/"}>标签内,"/react-micro1"要与主应用activeRule的值一致,否则会找不到路径。
  3. 如果这篇文章对你有用的话,注意要进行点赞收藏评论
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qiankun是一种用于搭建前端架构的开源框架,而React则是一个流行的JavaScript库,用于构建用户界面。如果想搭建一个qiankun应用,并且使用React作为应用的前端框架,我们可以按照以下步骤进行操作: 1. 首先,我们需要创建一个新的React应用。可以使用create-react-app命令行工具来创建一个基本的React项目,执行命令:`npx create-react-app my-app`。 2. 进入到项目的目录中,使用`cd my-app`命令。 3. 接下来,我们需要安装qiankun依赖包。在命令行中执行:`npm install qiankun`。 4. 在src目录下创建一个新的文件夹,命名为`main`,用来存放应用相关的代码。 5. 在main文件夹下创建一个新的文件,命名为`index.js`,这将是应用的入口文件。 6. 在`index.js`文件中,我们需要导入qiankun的相关内容。可以使用`import { registerMicroApps, start } from 'qiankun';`将qiankun的相关模块导入进来。 7. 接下来,我们可以注册子应用。使用`registerMicroApps`函数来注册子应用配置信息。配置信息包括子应用的名称、URL、挂载点等等。 8. 在`index.js`文件中,我们还需要定义一个渲染函数,用于将React应用挂载到指定的DOM节点上。可以使用`ReactDOM.render`函数来实现。需要注意的是,我们需要将该函数作为参数传递给`start`函数。 9. 最后,我们需要调用`start`函数来启动qiankun应用。可以在`index.js`文件的末尾调用`start`函数。 通过以上步骤,我们就可以搭建一个qiankun应用,并且使用React来构建其前端界面。在这个应用中,我们可以注册多个子应用,并将它们进行组合和协同工作。这样可以实现前端架构,并且能够实现多个子应用的统一管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值