Alpaka in React.js importieren

Oct 24 2020

Ich versuche, ein Alpaka-Formular in einer React-App zu verwenden:

import React, { useEffect, useRef } from "react";
import $ from "jquery"; import * as popper from "popper.js"; import * as bootstrap from "bootstrap"; import * as handlebars from "handlebars"; import alpaca from "alpaca"; var jp = require('jsonpath'); export default function Form() { useEffect(() => { $("#form").alpaca({
        });
    }, []);

    return <>
        <h2>Alpaca Form</h2>
        <div id="form"/>
    </>;
}

Webpack kompiliert dies, aber im Browser sehe ich diese Meldung:

jquery__WEBPACK_IMPORTED_MODULE_1___default(...)(...).alpaca is not a function

Während der Ausführung von "npm start" zeigt der Browserfehler Folgendes an: ReferenceError: jQuery ist nicht definiert.

Antworten

OussamaBENMAHMOUD Oct 25 2020 at 06:30

Für Alpaca ist handlebars.js erforderlich, daher müssen Sie es importieren, bevor Sie alpaca.js importieren können. Können Sie es versuchen und feststellen, ob dies für Sie funktioniert?

AlbertGevorgyan Oct 25 2020 at 16:55

Anscheinend habe ich eine Lösung gefunden, die in einer Spring Boor-Anwendung funktioniert. Zuerst erstelle ich ein statisches js-Skript mit nur einer Funktion:

function alpacaForm(tag, config) {
    $(tag).alpaca(config);
}

Dann füge ich dieses Skript in index.html ein und folge allen Alpaka-Abhängigkeiten:

    <!-- dependencies (jquery, handlebars and bootstrap) -->
    <script type="text/javascript" src="//code.jquery.com/jquery-1.11.1.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
    <link type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
    <script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>

    <!-- alpaca -->
    <link type="text/css" href="//cdn.jsdelivr.net/npm/[email protected]/dist/alpaca/bootstrap/alpaca.min.css" rel="stylesheet"/>
    <script type="text/javascript" src="//cdn.jsdelivr.net/npm/[email protected]/dist/alpaca/bootstrap/alpaca.min.js"></script>
    <script type="text/javascript" src="./js/alpacaForm.js"></script>

Dann rufe ich einfach alpacaForm in meiner React-App auf:

export default function Form() {
    useEffect(() => {
        alpacaForm("#form", {
               "schema": {
                   ...
               },
               "options": {
                   ...
               }
           }
        );
    }, []);

    return <>
        <h2>Alpaca Form</h2>
        <div id="form"/>
    </>;
}

Den Quellcode finden Sie hier: https://gitlab.com/AlbertGevorgyan/bootreact