Run-time integration via JavaScript

Run-time integration via JavaScript #

Trong React thông thường file index.jsx ta sẽ render <App /> vào trong một div element có id là root như <div id="root"></div>

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

ReactDOM.render(<App />, document.getElementById("root"));

Ta sẽ chỉnh lại như sau, khai báo một function global renderProducts truyển vào parameter containerId và tiến hành sử dụng ReactDOM render <App /> vào trong element này.

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

window.renderProducts = (containerId, history) => {
    ReactDOM.render(
        <App history={history} />,
        document.getElementById(containerId),
    );
};

Trong file index.html của container, ta load script file bundle của project products và sau đó gọi global function renderProducts để render app products vào trong ứng dụng container

<!-- /run-time-integration/container/public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <title>The Model Store</title>
    <link href="https://unpkg.com/[email protected]/dist/tailwind.min.css" rel="stylesheet">
    <!-- Load file bundle của project products  -->
    <script src="http://localhost:8002/main.js"></script>
</head>
<body>
    <div id="root"></div>

    <!-- Gọi function renderProducts để render app products vào element id có name products -->
    <script type="text/javascript">
        window.onload = () => {
            window.renderProducts('products')
        }
    </script>
</body>
</html>

Và kết quả sẽ như sau, ứng dụng container đã có thêm phần Related products của ứng dụng products Iframe

Source code Demo