如何在React中集成jQuery插件

Ram*_*gov 1 javascript jquery jquery-ui-plugins reactjs webpack

我想在React应用程序中使用https://github.com/t1m0n/air-datepicker,但它不起作用.

import React from 'react';
import AirDatepicker from 'air-datepicker';

class Datepicker extends React.Component {
  render() {
    return(
      <AirDatepicker />
    )
  }
}

export default Datepicker;
`
Run Code Online (Sandbox Code Playgroud)
<script src="./../bower_components/jquery/dist/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

这会产生:

error($ is not defined)
Run Code Online (Sandbox Code Playgroud)

另一种方法:

import React from 'react';
import $ from 'jquery';
import AirDatepicker from 'air-datepicker';

class Datepicker extends React.Component {
  render() {
    return(
      <AirDatepicker />
    )
  }
}

export default Datepicker;
Run Code Online (Sandbox Code Playgroud)

同样的错误.

如何将JQuery插件与React集成?

t1m*_*m0n 14

首先air-datepicker 不是React组件,它是jQuery插件,所以它不会像你的例子那样工作.

其次,为了正确的工作,jQuery应该在全局环境中可用,最实际的方法是将它包含在页面中通过<script>标记.它应该包含插件脚本之前.

要检查它是否真的包含在全球范围内,只需输入Chrome控制台window.jQuery并按Enter即可返回类似内容function (a,b){...}.如果没有,当你做错事时,检查标签的src属性<script>,也许它指向错误的目的地

如何让它在React中运行?

嗯,最简单的方法就是在组件中的任何DOM元素上初始化插件,就像在常规JavaScript中一样.

class MyComponent extends React.Component {
  componentDidMount(){
    this.initDatepicker();
  }
  
  initDatepicker(){
    $(this.refs.datepicker).datepicker();
  }
  
  render(){
    return (
      <div>
        <h3>Choose date!</h3>
        <input type='text'  ref='datepicker' />
      </div>    
    )
  }
}

ReactDOM.render(
  <MyComponent />,
  document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/air-datepicker/2.2.3/js/datepicker.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/air-datepicker/2.2.3/css/datepicker.min.css" rel="stylesheet"/>

<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

作为单独的组件

非常简单的datepicker React组件示例

class Datepicker extends React.Component {
  componentDidMount(){
    this.initDatepicker();
  }
  
  initDatepicker(){
    $(this.refs.datepicker).datepicker(this.props);
  }

  render(){
    return (
      <input type='text' ref='datepicker'/>
    )
  }
}


class MyComponent extends React.Component {
  render(){
    return (
      <div>
        <h3>Choose date from React Datepicker!</h3>
        <Datepicker range={true} />
      </div>    
    )
  }
}

ReactDOM.render(
  <MyComponent />,
  document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/air-datepicker/2.2.3/js/datepicker.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/air-datepicker/2.2.3/css/datepicker.min.css" rel="stylesheet"/>

<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

另外不要忘记包含css文件.

  • 这样做后我得到了这个错误。类型错误:jquery__WEBPACK_IMPORTED_MODULE_6___default(...)(...).datepicker 不是 create-react-app 的函数 (3认同)