Angular React Example

Angular React Example (Sử dụng Web components) #

Tích hợp một dự án sử dụng thư viện React (thư mục products) vô một dự án sử dụng Framework Angular (thư mục container)

Thư mục container (Angular) #

Sử dụng ng cli để tạo project bằng câu lệnh ng new container. Tiếp đến để để sử dụng Web components ta phải import thêm CUSTOM_ELEMENTS_SCHEMA từ @angular/core như sau

// angular-react/container/src/app/app.module.ts
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  bootstrap: [AppComponent]
})
export class AppModule { }

Tiếp đến ở file container/src/index.html đừng quên gắn script file của project products nhé

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Container</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link href="https://unpkg.com/[email protected]/dist/tailwind.min.css" rel="stylesheet">
  <script src="https://micro-frontends.tuando.net/demo/angular-react/products/dist/main.js"></script>
</head>
<body>
  <app-root></app-root>
</body>
</html>

Tiếp theo trong file container/src/app/app.component.html ta gắn HTML Custom Element mình đã khai báo của project products như sau

<div class="p-1">
    <web-components-products></web-components-products>
  </div>

Thế là có ngay một website xịn sò sử dụng giữa 2 công nghệ Angular và React

Lưu ý: có chỉnh một số cấu hình trong file angular.json để phục vụ cho quá trình build và deploy

"deployUrl": "https://micro-frontends.tuando.net/demo/angular-react/container/dist/", # Thay đổi domain load các static file 
"index": {
  "input": "src/index.html",
  "output": "../../index.html" # Thay đổi vị trí của file index.html sau khi build
},

Thư mục products (ReactJS) #

Khai báo một HTML Custom Element phục vụ cho việc render bên project container

// /angular-react/products/src/index.jsx
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

class Webcomponents extends HTMLElement {
    constructor() {
        super();
    }

    connectedCallback() {
        ReactDOM.render(<App />, this);
    }
}

customElements.define('web-components-products', Webcomponents);

Iframe

Source code Demo