簡體   English   中英

導入舊的ES5模塊以在ReactJS組件中使用

[英]Importing an old ES5 module for use in a ReactJS component

我正在嘗試在新的ReactJS應用程序中使用ES5模塊,並且正在努力了解如何正確導入該模塊,以便可以找到並執行其中的主要功能。

我正在加載模塊; import 'air-datepicker';

我知道我在這里做錯了,對於一個沒有適當導出功能的舊庫來說,這不是那么簡單!

無論如何,那么我應該能夠使用現有的div手動初始化日期選擇器;

$('#myDiv').datepicker();

我已經嘗試了導入和需求的多種變體,但是我總是遇到相同的錯誤-“ datepicker不是函數”。

我正在嘗試的庫是air-datepicker 我已經使用npm安裝了模塊,沒有任何問題,並且我知道該庫可以完美運行,而無需在將腳本手動加載到script標簽中的簡單頁面上使用React。 我的ReactJS應用程序是從FB教程頁面使用'create-react-app'創建的基本模板。

如果您使用的是create-react-app ,則應該可以將其導入

import 'air-datepicker/dist/css/datepicker.min.css';
import 'air-datepicker';

如果您在HTML中使用<script>標簽添加了jQuery,則需要在air-datepicker導入之前添加此行

const $ = window.jQuery;
const jQuery = window.jQuery;

如果使用npm install添加了jQuery,則必須添加以下幾行

import $ from 'jquery';
import jQuery from 'jquery';
window.$ = $;
window.jQuery = jQuery;
//... air-datepicker imports

確保在您的componentDidMount或您確定已安裝該元素的某個位置中對其進行初始化。

componentDidMount() {
    $('#my-element').datepicker();
}

render() {
    return <div>
        <input 
            id="my-element" 
            type='text' 
            className="datepicker-here" 
            data-position="right top" />
    </div>
}

好吧,那是我一生中永遠都不會回來的一天!

該問題是由Babel導入訂購引起的。 導入語句被吊起-意味着它們在執行任何其他代碼(即,我的窗口分配)之前首先被評估。 這是通天塔設計的。

據我所知,避免Babel吊裝的唯一方法是完全避免“進口”,而改用require。

因此,當您需要air-datepicker時,將按照以下順序設置全局$。 如果您嘗試“導入” air-datepicker,它將無法正常工作,因為Babel將在執行窗口之前評估所有導入語句。 分配。

import $ from 'jquery';
window.$ = $;
require('air-datepicker');

還有另外一種或兩種方法也可以使用,但是它們都不是很理想,因為它們需要您手動配置webpack-即“彈出” create-react-app配置並單獨進行...

使用imports-loader ;

// only works if you disable no-webpack-loader-syntax
require("imports?$=jquery!air-datepicker");

或者,使用ProvidePlugin ,使該模塊可用於所有模塊。

您必須為其指定一個標識符:

import datepicker from 'air-datepicker';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM