Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you import a javascript package from a cdn/script tag in React?

I'd like to import this javascript package in React

<script src="https://cdn.dwolla.com/1/dwolla.js"></script> 

However, there is no NPM package, so I can't import it as such:

import dwolla from 'dwolla' 

or

import dwolla from 'https://cdn.dwolla.com/1/dwolla.js' 

so whenver I try

dwolla.configure(...) 

I get an error saying that dwolla is undefined. How do I solve this?

Thanks

like image 766
Jeremy Herzog Avatar asked Jul 03 '17 04:07

Jeremy Herzog


People also ask

How import JavaScript file into react?

Installation: Open a terminal inside your ReactJS project folder and write the following code to install react-script-tag Package. Import 'ScriptTag' component: Import the built-in 'ScriptTag' component from the react-script-tag library at the top of the file where we want to add the script tag.

How do I import a script tag?

To include an external JavaScript file, we can use the script tag with the attribute src . You've already used the src attribute when using images. The value for the src attribute should be the path to your JavaScript file. This script tag should be included between the <head> tags in your HTML document.


2 Answers

Go to the index.html file and import the script

<script src="https://cdn.dwolla.com/1/dwolla.js"></script> 

Then, in the file where dwolla is being imported, set it to a variable

const dwolla = window.dwolla; 
like image 130
Jeremy Herzog Avatar answered Sep 21 '22 12:09

Jeremy Herzog


This question is getting older, but I found a nice way to approach this using the react-helmet library which I feel is more idiomatic to the way React works. I used it today to solve a problem similar to your Dwolla question:

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>);     } } 

The use of this.state means that React will automatically be watching the value of myExternalLib and update the DOM appropriately.

Credit: https://github.com/nfl/react-helmet/issues/146#issuecomment-271552211

like image 35
Aaron Newton Avatar answered Sep 23 '22 12:09

Aaron Newton