J'aimerais importer ce paquet javascript dans React
<script src="https://cdn.dwolla.com/1/dwolla.js"></script>
Cependant, il n'y a pas de package NPM, je ne peux donc pas l'importer en tant que tel:
import dwolla from 'dwolla'
ou
import dwolla from 'https://cdn.dwolla.com/1/dwolla.js'
alors quand j'essaie
dwolla.configure(...)
Je reçois une erreur en disant que dwolla est indéfini. Comment résoudre ce problème?
Merci
Accédez au fichier index.html et importez le script.
<script src="https://cdn.dwolla.com/1/dwolla.js"></script>
Ensuite, dans le fichier où dwolla est importé, définissez-le sur une variable
const dwolla = window.dwolla;
Cette question prend de l’âge, mais j’ai trouvé un bon moyen d’aborder la question en utilisant la bibliothèque react-helmet
qui, à mon avis, est plus idiomatique par rapport au fonctionnement de React. Je l'ai utilisé aujourd'hui pour résoudre un problème similaire à votre question Dwolla:
import React from "react";
import Helmet from "react-helmet";
export class ExampleComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
myExternalLib: null
};
this.handleScriptInject = this.handleScriptInject.bind(this);
}
handleScriptInject({ scriptTags }) {
if (scriptTags) {
const scriptTag = scriptTags[0];
scriptTag.onload = () => {
// I don't really like referencing window.
console.log(`myExternalLib loaded!`, window.myExternalLib);
this.setState({
myExternalLib: window.myExternalLib
});
};
}
}
render() {
return (<div>
{/* Load the myExternalLib.js library. */}
<Helmet
script={[{ src: "https://someexternaldomain.com/myExternalLib.js" }]}
// Helmet doesn't support `onload` in script objects so we have to hack in our own
onChangeClientState={(newState, addedTags) => this.handleScriptInject(addedTags)}
/>
<div>
{this.state.myExternalLib !== null
? "We can display any UI/whatever depending on myExternalLib without worrying about null references and race conditions."
: "myExternalLib is loading..."}
</div>
</div>);
}
}
L'utilisation de this.state
signifie que React surveillera automatiquement la valeur de myExternalLib et mettra à jour le DOM de manière appropriée.
Crédit: https://github.com/nfl/react-helmet/issues/146#issuecomment-271552211
Vous ne pouvez pas exiger ou importer des modules à partir d'une URL.
ES6: module d'importation depuis l'URL
Ce que vous pouvez faire est de faire une requête HTTP pour obtenir le contenu du script et l'exécuter, comme dans la réponse pour comment demander une URL dans Node.js
Mais ce serait une mauvaise solution car la compilation de votre code dépendrait d'un appel HTTP externe.
Une bonne solution serait de télécharger le fichier dans votre base de code et de l'importer à partir de là. Vous pouvez valider le fichier dans git s'il ne change pas beaucoup et qu'il est autorisé à le faire. Sinon, une étape de compilation pourrait télécharger le fichier.
Ajoutez la balise script dans votre index.html et si vous utilisez Webpack, vous pouvez utiliser ce plugin Webpack https://webpack.js.org/plugins/provide-plugin/