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
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.
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.
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;
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With