【问题标题】:Using jQuery with the ASP.NET Core 2 React template将 jQuery 与 ASP.NET Core 2 React 模板一起使用
【发布时间】:2018-05-13 09:46:32
【问题描述】:

我正在尝试基于 ASP.NET Core 2.0 中的新 React 模板构建 Web 应用

我想通过 jQuery 发出 ajax 请求。我的问题是该模板默认使用 TypeScript (tsx) 文件,如果我尝试按照以下方式进行操作

import { $ } from 'jquery'

我收到一个 TypeScript 错误,说它无法确定 $ 的类型。

按照这个答案https://stackoverflow.com/a/32052431/8991878,我继续做了一个npm install --save-dev @types/jquery

第一个错误消失了,但现在我得到了

模块“jquery: 没有导出的成员 $.

我发现的另一篇文章建议删除大括号{}。这样做之后 我反而得到了

模块“jquery”没有默认导出

我是一名后端开发人员,我对 TypeScript 和 jQuery 都没有很多经验,所以我想我只是在做一些不正确的蠢事。

我在 https://www.typescriptlang.org/docs/handbook/module-resolution.html 处阅读了有关 TypeScript 模块解析的信息,并且确实验证了我的 package.json 文件具有 "@types/jquery": "^3.2.16"。我在 node_modulesnode_modules/@types 中也有 jquery

【问题讨论】:

  • 导入错误。应该是:import $ from 'jquery'
  • 不确定你是否读到了我的文章结尾。我确实尝试过,但我得到了一个不同的错误:)
  • 嗯,没错。您使用的是哪个jquery 版本?
  • "jquery": "3.2.1" 和 "@types/jquery": "^3.2.16" 这些都来自 package.json 文件

标签: jquery reactjs typescript asp.net-core module


【解决方案1】:

对于任何想知道的人,通过将 import { $ } from 'jquery' 更改为 import * as $ from 'jquery' 来解决它

【讨论】:

  • jQuery 确实支持 CommonJS 模块语法,但在浏览器中它设置为:window.jQuery = window.$ = jQuery; - 这就是为什么我在导入 jQuery 时不会使用别名(特别是 jQuery ......并认为我在说一般!)
  • 在未来,他们几乎肯定会被 jQuery 库中的 ECMAScript 模块所吸引。当它发生时,这将改变答案。
【解决方案2】:

我相信 jQuery 的正确导入样式是最简单的形式:

import 'jquery';

如果您使用本机浏览器加载程序执行此操作,此时它需要一个文件扩展名,因此普通浏览器版本将是:

import './jquery.js';

(这是将实际的 jQuery 文件复制到根目录,因此浏览器不必导航到 node_modules。

【讨论】:

  • 这确实解决了问题。但是,现在当我尝试调用 $.ajax 时,我得到 $ 未定义。关于如何解决这个问题的任何想法?
  • 更新:嗯,不确定这是否是最好的解决方案,但我做了一个 import * as $ from 'jquery' 并且它成功了。
猜你喜欢
  • 2011-06-03
  • 2017-09-02
  • 2018-01-25
  • 2013-05-02
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多