【问题标题】:How to use third-party library (gridstack.js) with Typescript and React如何在 Typescript 和 React 中使用第三方库 (gridstack.js)
【发布时间】:2017-09-05 14:44:41
【问题描述】:

也许我遗漏了 Typescript 和/或 React 的一些基本概念,但我无法使以下内容起作用:

  1. 我使用React/Typescript Boilerplate 作为我的应用程序模板。 (这里没有问题)。

  2. 另一方面,我使用了一个名为GridStack.js 的普通JS 库,它使用$.fn.gridstack(options) 扩展了jQuery。当您将此库导入一个简单的 HTML 页面时,您只需要通过调用 $('.grid-stack').gridstack(options) 来初始化它。 (仍然没有问题)。

  3. 然后我的目标是为 gridstack.js 创建一个 TypeScript/React 包装器,而不是可以在我的样板中使用。这是我遇到问题的地方。我在打字稿和反应之间有点迷失,我什至找到了wrapper for ReactGridstack.js typings,但我不能让所有东西一起工作。这就是为什么我决定尝试创建自己的包装器但仍然没有成功的原因。特别是在哪里导入 react-gridstackgridstack 以使其工作。

有人可以解释我缺少什么吗?到目前为止,这是我的代码:

gridstackWrapper.tsx

import * as React from 'react';
import * as $ from 'jquery';

export default class extends React.Component {
    public shouldComponentUpdate() {
        return false;
    }

    public componentDidMount() {
        $(this.refs.gridstack).addClass('a-new-class');  // THIS WORKS

        // ERROR: TypeError: $(...).gridstack is not a function
        // So basically $.fn.gridstack(options) is not working
        $(this.refs.gridstack).gridstack(this.gridstackOptions);
    }

    public render() {
        return (
            <div ref="gridstack" className="grid-stack" />
        );
    }

    private gridstackOptions = {
        float: false,
        animate: true,
        resizable: {handles: 'se, sw'},
        verticalMargin: 12,
        placeholderText: 'Move Control Here',
        minWidth: 767,
    };
}

index.tsx

import * as React from 'react';
import GridstackWrapper from './gridstackWrapper';

class About extends React.Component<any, any> {
  public render() {
    return (
      <GridstackWrapper />
    );
  }
}

export { About }

package.json

"devDependencies": {
    "@types/gridstack": "0.0.38",
    "@types/jquery": "3.2.12",
    "@types/jqueryui": "1.11.36",
    "@types/lodash": "4.14.74",
}
"dependencies": {
    "gridstack": "0.3.0",
    "jquery": "3.2.1",
    "jquery-ui": "1.12.1",
    "lodash": "4.17.4"
}

任何帮助都将不胜感激,特别是如果我缺少任何关于 React 和 Typescript 的基本概念。

提前致谢!

【问题讨论】:

  • 我添加了 webpack 标签,因为这似乎是一个 webpack 捆绑问题(错误出现在运行时,而不是编译时)。

标签: javascript reactjs typescript webpack


【解决方案1】:

您需要安装 gridstack 的类型定义。

运行npm install --save-dev @types/gridstack

这将从DefinitelyTyped 安装.d.ts 文件。

【讨论】:

  • 谢谢!我已经这样做了,我编辑了我的问题以显示我的 package.json(部分)的样子。
  • 运行时间!当然,如果我只是手动将 gridstack.min.js 包含为 HTML 脚本,它会起作用,但我希望它被打包到 bundle.js
  • 所以这个问题实际上与您的任何标签都无关。它是一个捆绑问题。您使用的是哪个捆绑器?请将配置添加到您的问题中。
  • 好的,谢谢,它是 webpack,我使用了样板文件中的那个,在这个链接上更容易检查:github.com/barbar/vortigern/blob/develop/config/webpack/dev.js 谢谢你的帮助!
  • 嗯,我对 webpack 了解不多。我最近将 my boilerplate 切换到 webpack 并使用 externals 告诉 webpack 不要捆绑导入的模块。你试过import * as g from './gridstack.js'吗?
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 2018-09-10
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多