如何在 reactjs 中包含外部 JavaScript 库
How to include external JavaScript library in reactjs
我想知道如何在 React 项目中包含外部 JavaScript 库。例如,我想导入 jspdf 库:https://github.com/MrRio/jsPDF/blob/master/jspdf.js 并在我的 reactjs 应用程序中使用它。
到目前为止,我试过像这样使用 require :
let React = require('react');
let { Spacing, Typography } = Styles;
let DoughnutChart = require("react-chartjs").Doughnut;
let Chart = require('react-google-charts').Chart;
let { StylePropable, StyleResizable } = Mixins;
let EditableDiv = require('../EditableDiv.jsx');
//some other library
//the library that matter for me
var pdfConverter = require('../utils/jspdf.source.js');
//then I have my classical react code which works and a function to generate ad pdf
_generatePdf: function(){
console.log('Genrating pdf');
var doc = new pdfConverter.jsPDF('p','pt');
var img = new Image();
}
我有以下错误:类型错误:pdfConverter.jsPDF 不是函数。
为了让它工作,我做了一些丑陋的事情,我将 jspdf-source.js 的源代码复制到我的 react.jsx 文件中,然后调用 jsPDF 而不是 pdfConverter.jsPDF。肯定是方法不对,但是导入库并不能成功。
你能告诉我哪里做错了吗?我该如何改正?
-编辑-
当我使用丑陋的解决方案(将源代码复制到我的文件中)时,我只需执行以下操作:
var doc = new jsPDF('p','pt);
它工作得很好,希望我有一个非常大的文件
在@dannyjolie bellow 建议的解决方案之后,我直接从 npm 包中导入了 jspdf,但我仍然无法使用该库。我尝试了以下导致错误的代码:
var pdfConverter = require('jspdf');
var converter = new pdfConverter();
var doc = converter.jsPDF('p', 'pt');
TypeError: pdfConverter 不是构造函数
这意味着我必须导入来自包的 jsPDF,而不仅仅是 jspdf?
然后我尝试了
let pdfConverter = require('jspdf');
var converter = pdfConverter.jsPDF;
var doc = new converter('p', 'pt');
ReferenceError: jsPDF 未定义
类型错误:转换器不是构造函数
好吧,显然,我没有导入正确的东西或不正确的方式。
我做错了什么?
首先,不要使用源文件。就像任何其他包一样 npm install jspdf --save
,并使用 var pdfConverter = require('jspdf');
导入它
其次,您在这一行中缺少一个 () var doc = new pdfConverter.jsPDF('p','pt');
做这样的事情:
var converter = new pdfConverter();
var doc = converter.jsPDF('p', 'pt');
我知道这已经过时了,但我认为如果有人 post 编辑了一个完整的工作示例会有所帮助。我花了一段时间才弄明白,使用另一个 post 作为起点:
假设您正在使用 create-react-app,用以下内容覆盖您的 App.js...
import React, { Component } from 'react';
import pdfConverter from 'jspdf';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
this.toDataUrl = this.toDataUrl.bind(this);
}
toDataUrl(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}
onClick() {
var doc = new pdfConverter('p','pt','letter');
//console.log(doc.getFontList() );
this.toDataUrl('background.jpg', function(base64Img) {
var imgData = base64Img;
console.log(imgData);
console.log('Adding to doc.');
doc.addImage(imgData, 'JPEG', 0, 0, 612, 792);
console.log('Image added.');
doc.setFont('Times', 'Roman');
doc.setFontSize(22);
doc.text(20, 50, 'Park Entry Ticket');
doc.setFontSize(16);
doc.text(20, 80, 'Address1: ' );
doc.text(20, 100, 'Address2: ' );
doc.text(20, 120, 'Entry Date & time: ');
doc.text(20, 140, 'Expiry date & time: ' );
console.log('About to save');
doc.save("test.pdf");
});
}
render() {
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
<input type='button'
onClick={this.onClick} value="Print"/>
</p>
</div>
);
}
}
export default App;
如果您在 /public/index.html
中包含外部 js 文件 link,则可以使用带有 window
前缀的外部库。
以JQuery为例。将以下行放入 /public/index.html
:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
像这样在你的项目中使用它:
window.$("#btn1").click(function(){
alert("Text: " + $("#test").text());
});
我想知道如何在 React 项目中包含外部 JavaScript 库。例如,我想导入 jspdf 库:https://github.com/MrRio/jsPDF/blob/master/jspdf.js 并在我的 reactjs 应用程序中使用它。
到目前为止,我试过像这样使用 require :
let React = require('react');
let { Spacing, Typography } = Styles;
let DoughnutChart = require("react-chartjs").Doughnut;
let Chart = require('react-google-charts').Chart;
let { StylePropable, StyleResizable } = Mixins;
let EditableDiv = require('../EditableDiv.jsx');
//some other library
//the library that matter for me
var pdfConverter = require('../utils/jspdf.source.js');
//then I have my classical react code which works and a function to generate ad pdf
_generatePdf: function(){
console.log('Genrating pdf');
var doc = new pdfConverter.jsPDF('p','pt');
var img = new Image();
}
我有以下错误:类型错误:pdfConverter.jsPDF 不是函数。
为了让它工作,我做了一些丑陋的事情,我将 jspdf-source.js 的源代码复制到我的 react.jsx 文件中,然后调用 jsPDF 而不是 pdfConverter.jsPDF。肯定是方法不对,但是导入库并不能成功。
你能告诉我哪里做错了吗?我该如何改正?
-编辑-
当我使用丑陋的解决方案(将源代码复制到我的文件中)时,我只需执行以下操作:
var doc = new jsPDF('p','pt);
它工作得很好,希望我有一个非常大的文件
在@dannyjolie bellow 建议的解决方案之后,我直接从 npm 包中导入了 jspdf,但我仍然无法使用该库。我尝试了以下导致错误的代码:
var pdfConverter = require('jspdf');
var converter = new pdfConverter();
var doc = converter.jsPDF('p', 'pt');
TypeError: pdfConverter 不是构造函数 这意味着我必须导入来自包的 jsPDF,而不仅仅是 jspdf?
然后我尝试了
let pdfConverter = require('jspdf');
var converter = pdfConverter.jsPDF;
var doc = new converter('p', 'pt');
ReferenceError: jsPDF 未定义
类型错误:转换器不是构造函数
好吧,显然,我没有导入正确的东西或不正确的方式。 我做错了什么?
首先,不要使用源文件。就像任何其他包一样 npm install jspdf --save
,并使用 var pdfConverter = require('jspdf');
其次,您在这一行中缺少一个 () var doc = new pdfConverter.jsPDF('p','pt');
做这样的事情:
var converter = new pdfConverter();
var doc = converter.jsPDF('p', 'pt');
我知道这已经过时了,但我认为如果有人 post 编辑了一个完整的工作示例会有所帮助。我花了一段时间才弄明白,使用另一个 post 作为起点:
假设您正在使用 create-react-app,用以下内容覆盖您的 App.js...
import React, { Component } from 'react';
import pdfConverter from 'jspdf';
import logo from './logo.svg';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
this.toDataUrl = this.toDataUrl.bind(this);
}
toDataUrl(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
}
reader.readAsDataURL(xhr.response);
};
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
}
onClick() {
var doc = new pdfConverter('p','pt','letter');
//console.log(doc.getFontList() );
this.toDataUrl('background.jpg', function(base64Img) {
var imgData = base64Img;
console.log(imgData);
console.log('Adding to doc.');
doc.addImage(imgData, 'JPEG', 0, 0, 612, 792);
console.log('Image added.');
doc.setFont('Times', 'Roman');
doc.setFontSize(22);
doc.text(20, 50, 'Park Entry Ticket');
doc.setFontSize(16);
doc.text(20, 80, 'Address1: ' );
doc.text(20, 100, 'Address2: ' );
doc.text(20, 120, 'Entry Date & time: ');
doc.text(20, 140, 'Expiry date & time: ' );
console.log('About to save');
doc.save("test.pdf");
});
}
render() {
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
<input type='button'
onClick={this.onClick} value="Print"/>
</p>
</div>
);
}
}
export default App;
如果您在 /public/index.html
中包含外部 js 文件 link,则可以使用带有 window
前缀的外部库。
以JQuery为例。将以下行放入 /public/index.html
:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
像这样在你的项目中使用它:
window.$("#btn1").click(function(){
alert("Text: " + $("#test").text());
});