【发布时间】:2019-03-26 19:54:02
【问题描述】:
我正在使用外部 Javascript 文件设置动画插件来创建 Globe Tag Cloud。我已经在普通 html 上进行了测试,它运行良好,但是当我调用 ReactJS 时,它总是给我这样的错误消息:
类型错误: jquery__WEBPACK_IMPORTED_MODULE_6___default(...)(...).SVG3DTagCloud 是 不是函数
我正在使用生命周期方法,像这样,它成功地将 JS 文件注入 HTML 正文但仍然无法正常工作并给我错误消息。
componentDidMount() {
var cloudTag = document.createElement('script');
cloudTag.src = '/svg3dtagcloud.min.js';
cloudTag.async = true;
$(document).ready(function () {
// This is was on the documentation https://github.com/NiklasKnaack/jquery-svg3dtagcloud-plugin
var entries = [
{label: 'Tag One', url: '#', target: '_top'},
{label: 'Tag Two', url: '#', target: '_top'},
{label: 'Tag Three', url: '#', target: '_top'},
{label: 'Tag Four', url: '#', target: '_top'},
{label: 'Tag Five', url: '#', target: '_top'}
];
var settings = {
entries: entries,
width: 480,
height: 480,
radius: '65%',
radiusMin: 75,
bgDraw: true,
bgColor: '#111',
opacityOver: 1.00,
opacityOut: 0.05,
opacitySpeed: 6,
fov: 800,
speed: 1,
fontFamily: 'Oswald, Arial, sans-serif',
fontSize: '15',
fontColor: '#fff',
fontWeight: 'normal',
fontStyle: 'normal',
fontStretch: 'normal',
fontToUpperCase: true,
tooltipFontFamily: 'Oswald, Arial, sans-serif',
tooltipFontSize: '11',
tooltipFontColor: '#fff',
tooltipFontWeight: 'normal',
tooltipFontStyle: 'normal',
tooltipFontStretch: 'normal',
tooltipFontToUpperCase: false,
tooltipTextAnchor: 'left',
tooltipDiffX: 0,
tooltipDiffY: 10
};
cloudTag.onload = () => {
$('#holder').SVG3DTagCloud(settings);
}
});
document.body.appendChild(cloudTag);
}
如何运行外部 Javascript 插件文件以在 ReactJS 上正确运行?有什么方法可以在里面运行函数吗?
【问题讨论】:
-
在 componentDidMount 中添加这个 if(!jQuery().SVG3DTagCloud) { $.fn.SVG3DTagCloud=function(){} }
-
@Sujit.Warrier 他做到了,从代码中可以看出
-
很抱歉提交的评论不完整。已编辑
-
这个想法很糟糕——你不能确定在脚本标签内固定源代码后库会停止加载,因为库的 init 函数可以是异步的。最好的方法是尽可能从 npm 导入它(你也可以加载 github 包)或在开始时加载所有 CDN 库并创建启动画面。由于您必须在库中等待,您还可以将 async 设置为 false;
-
@Sujit.Warrier 谢谢你,错误信息消失了,但仍然没有返回任何东西
标签: javascript jquery html reactjs