مهندس برمجيات & مطور ويب

سيرفر ريندر باستخدام Spring Boot و React

دليل خطوة بخطوة

في هذا الدليل، سنتكامل عرض جانب الخادم (SSR) لمكونات React في تطبيق Spring Boot باستخدام GraalVM.

1. إعداد تطبيق Spring Boot الخاص بك

تأكد من إعداد تطبيق Spring Boot. يمكنك إنشاء واحد باستخدام Spring Initializr أو طريقتك المفضلة.

spring init --dependencies=web my-springboot-react-ssr
cd my-springboot-react-ssr

2. إضافة الاعتماديات إلى pom.xml

أضف اعتماد GraalVM JavaScript إلى ملف pom.xml الخاص بك:

<dependency>
    <groupId>org.graalvm.js</groupId>
    <artifactId>js</artifactId>
    <version>21.1.0</version>
</dependency>

3. إنشاء تطبيق React الخاص بك وتغليفه

قم بإنشاء تطبيق React الخاص بك باستخدام Create React App أو ما شابه:

npx create-react-app my-react-app
cd my-react-app
npm run build

سيقوم هذا بإنشاء بناء إنتاجي لتطبيق React الخاص بك في دليل build.

4. تكوين Spring Boot لاستخدام GraalVM

قم بإنشاء خدمة في تطبيق Spring Boot الخاص بك لعرض مكونات React:

package com.example.ssr;

import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;
import org.springframework.stereotype.Service;

import java.nio.file.Files;
import java.nio.file.Paths;

@Service
public class ReactRenderer {

    private static final String REACT_COMPONENT_PATH = "path/to/your/build/static/js/main.js";

    public String renderComponent(String componentName, String propsJson) throws Exception {
        String jsCode = new String(Files.readAllBytes(Paths.get(REACT_COMPONENT_PATH)));

        try (Context context = Context.create("js")) {
            context.eval("js", jsCode);

            Value renderFunction = context.getBindings("js").getMember("renderComponent");
            if (renderFunction == null || !renderFunction.canExecute()) {
                throw new IllegalStateException("Render function not found or not executable");
            }

            Value result = renderFunction.execute(componentName, propsJson);
            return result.asString();
        }
    }
}

تأكد من أن بناء React الخاص بك يصدر دالة renderComponent التي تأخذ اسم المكون و JSON الخاص بالخصائص.

5. إنشاء وحدة تحكم لعرض مكونات React

package com.example.ssr;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SsrController {

    @Autowired
    private ReactRenderer reactRenderer;

    @GetMapping("/render")
    public String render(@RequestParam String component, @RequestParam String props) {
        try {
            return reactRenderer.renderComponent(component, props);
        } catch (Exception e) {
            e.printStackTrace();
            return "Error rendering component: " + e.getMessage();
        }
    }
}

6. تكوين تطبيق React الخاص بك لـ SSR

تأكد من أن تطبيق React الخاص بك يصدر دالة renderComponent. في src/index.js:

import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from './App';

// Function to render a React component on the server
export function renderComponent(componentName, propsJson) {
    const props = JSON.parse(propsJson);
    let Component;
    switch (componentName) {
        case 'App':
            Component = App;
            break;
        // Add more components here
        default:
            throw new Error(`Unknown component: ${componentName}`);
    }
    return ReactDOMServer.renderToString(<Component {...props} />);
}

7. بناء تطبيق React الخاص بك

أعد بناء تطبيق React الخاص بك بعد تعديل src/index.js:

npm run build

الآن، يجب أن يكون تطبيق Spring Boot الخاص بك قادرًا على عرض مكونات React على الخادم باستخدام نقطة النهاية /render.

الملخص

باتباع هذه الخطوات، يمكنك دمج عرض جانب الخادم لمكونات React في تطبيق Spring Boot باستخدام GraalVM. هذا الإعداد يساعد في تحسين أداء وتحسين محركات البحث لتطبيق الويب الخاص بك. تأكد من التعامل مع أي أخطاء محتملة والحالات الحافة لتنفيذ قوي.

أضف تعليق