【问题标题】:reactjs, bootstrap and npm import - jQuery is not definedreactjs、bootstrap 和 npm 导入 - 未定义 jQuery
【发布时间】:2017-06-08 15:44:22
【问题描述】:

我正在尝试在我的 react 应用程序中使用引导程序,但它给了我一个Error: Bootstrap's JavaScript requires jQuery。我已经导入 jquery 并尝试从其他帖子中尝试以下内容:

import $ from 'jquery';
window.jQuery = $;
window.$ = $;
global.jQuery = $;

但是,我仍然收到 not defined 错误。

解决这个问题的唯一方法是放置

  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>

进入 index.html

有没有办法导出 jquery 或让引导程序能够检测/读取它?

我通过调用我的引导程序

import bootstrap from 'bootstrap'

【问题讨论】:

  • 如果你进入你的项目文件夹,在 CLI 中使用 node 命令运行 node,然后在 REPL 中输入 require('jquery'),它会返回一个函数吗?只是要求确保您已将此依赖项添加到纱线锁定文件中。
  • 最近刚用create-react-appjQuery,不是react-react-app的问题。
  • @RishatMuhametshin 是的,它返回一个函数
  • @Xlee 我可以在反应部分使用 jquery,例如 $("#select"); 有效。这主要是 DataTables 的问题,因为它要求 jQuery 对窗口/全局可见/可用
  • 你把你的引导 js 放在哪里?请发布您的更多 html 内容。

标签: javascript twitter-bootstrap reactjs npm create-react-app


【解决方案1】:

import bootstrap from 'bootstrap'

const bootstrap = require('bootstrap');

我尝试使用“create-react-app”构建项目,发现导入模块的加载顺序与导入顺序不同。这就是boostrap找不到jquery的原因。通常,您可以在这种情况下使用“require”。它适用于我的电脑。

import $ from 'jquery';
window.jQuery = $;
window.$ = $;
global.jQuery = $;
const bootstrap = require('bootstrap');
console.log(bootstrap)

相关的事情:

imports 被吊起

https://stackoverflow.com/a/29334761/4831179

imports 应该先去

值得注意的是,导入会被提升,这意味着导入的模块将在任何散布在它们之间的语句之前进行评估。将所有导入放在文件顶部可能会防止规范的这一部分导致意外。

来自https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md

【讨论】:

  • 奇怪我怎么不能使用import bootstrap from 'bootstrap';
【解决方案2】:

你在使用 webpack 吗?如果是这样,请将其添加到您的 webpack.config.js

plugins: [
  new webpack.ProvidePlugin({
    jQuery: 'jquery',
    $: 'jquery'
  })
],

【讨论】:

  • 不幸的是,我正在使用 create-react-app,所以我认为我无法配置 webpack 的东西。我将尝试弹出它,看看会发生什么。
  • 您使用的是 create-react-app,而不是 webpack。在那种情况下,var $ = require('jquery');window.$ = $;window.jQuery = $; 怎么样?我很抱歉我不太清楚它为什么会起作用,但也许会有所帮助。
【解决方案3】:

使用 create-react-app 时, 首先你需要像这样安装Jquery包。

sudo npm install jquery --save 

像这样反应引导

 sudo npm install react-bootstrap --save

现在在 JS 文件中,您可以像这样使用 jquery 和 bootstrap。

 import $ from 'jquery';
 import { Carousel, Modal,Button, Panel,Image,Row,Col } from 'react-bootstrap';

你可以使用这个 url 来响应引导组件 https://react-bootstrap.github.io/components.html

您可以像这样使用具有 onclick 功能的按钮

<Button bsStyle="primary" bsSize="large" active onClick={this.getData()}>Sample onClick</Button>

 getData(){
 $.ajax({
   method: 'post',
   url:'http://someurl/getdata',
   data: 'passing data if any',
   success: function(data){
      console.log(data);
      alert(data);
      this.setState({
         some: data.content,
         some2: data.content2,
      });
   },
   error: function(err){
      console.log(err);
   }
 });

所有这些都是使用 jquery 和 bootstrap 的基本示例,如果您需要更多内容,您可以为此编写 cmets。

【讨论】:

  • 希望能有更多的方式将它与标准引导程序一起使用,因为我对此比较熟悉。唯一不能使用普通引导程序的是导入 jQuery,如果我在 HTML head 中执行它,它可以工作。
  • 安装 react bootstrap 后,您还可以使用普通的 bootstrap 组件,例如将 css 类名写入 div 元素。通过在头文件中提供 bootstrap cdn。您将面临的基本问题是它第一次加载会很好,稍后在下一页的路由中,引导程序可能会导致无法正确加载等问题。
  • 请不要使用 sudo 进行 npm 安装...
【解决方案4】:

编辑:我从您的 cmets 看到您的问题似乎是关于将数据表与 jquery 集成,您应该考虑重新制定您的问题。

请记住,React 使用 虚拟 DOM,而 jQuery 完全在 DOM 中运行。

因此,考虑到这一点,似乎几乎不可能让 DataTables 和 jQuery 全面发挥作用。你可以显示 DataTables,但是当你用 React 做任何其他事情时,它基本上会回到使用它自己的 virtual DOM,这会弄乱 DataTables。

一些反应友好的数据表替代品

DataTables 相关讨论:

【讨论】:

  • 好吧,我可以通过将 jquery 放入 index.html 标头来使其工作。只是感觉不对,因为我已经 npm 安装了 jquery
  • @A.Lau 是的,我同意考虑到 npm 并不理想,但似乎是迄今为止唯一的解决方法。我会说,如果它对您的项目有利而没有任何缺点,请继续通过 html 的头部加载它。
猜你喜欢
  • 2017-11-22
  • 2018-01-20
  • 2017-06-10
  • 2021-04-05
  • 2016-05-13
  • 2016-06-24
  • 1970-01-01
  • 2019-02-11
  • 2015-01-17
相关资源
最近更新 更多