首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与React一起使用时,.keyboard不是函数

与React一起使用时,.keyboard不是函数
EN

Stack Overflow用户
提问于 2017-03-01 22:49:43
回答 2查看 602关注 0票数 0

我想使用jquery keyboard.js从文本区域获取用户输入。

我使用的键盘:https://github.com/Mottie/Keyboard

这是我得到的错误:

以下是我文件中的导入内容:

代码语言:javascript
复制
import React from "react";
import ReactDOM from 'react-dom';
import classnames from 'classnames';
import jQuery from 'jquery';
import keyboard from '../../../../node_modules/virtual-keyboard/dist/js/jquery.keyboard.js';

这是我的代码:

代码语言:javascript
复制
export default class KEyboard extends React.Component {
    ...
    componentDidMount() {
         ...
         jQuery(ReactDOM.findDOMNode(this.refs.keyboard)).keyboard(this.props.options);

this.refs.keyboard很好。已经调试好了。与this.props.options相同

这是我的webpack.config.js

代码语言:javascript
复制
var path = require('path');
const validate = require('webpack-validator');


var config = {
  entry: './src/index.js',
  output: {
  path: __dirname,
  filename: 'bundle.js'
},
devtool: 'source-map',
eslint: {
  configFile: './.eslintrc'
},
module: {
  preLoaders: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      loader: 'eslint-loader'
    },
  ],
  loaders: [
    {
      test: /\.(js|jsx)$/,
      loader: 'babel-loader',
      include: path.join(__dirname, 'src'),
      exclude: /node_modules/,
      query: {
        presets: ['es2015', 'react']
      }
    },
    {
      test: /\.css$/,
      loader: 'style-loader'
    },
    {
      test: /\.css$/,
      loader: 'css-loader',
      query: {
        modules: true,
        localIdentName: '[name]__[local]___[hash:base64:5]'
      }
    },
    /*
    {
      test: /\.scss$/,
      loaders: ['style', 'css', 'sass']
    },
   */
    {
      test: /\.scss$/,
      loader: 'style-loader'
    },
    {
      test: /\.scss$/,
      loader: 'css-loader',
      query: {
        modules: true,
        localIdentName: '[name]__[local]___[hash:base64:5]'
      }
    },
    {
      test: /\.scss$/,
      loader: 'sass-loader'
    },
    /*
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loaders: ['babel-loader', 'eslint-loader']
    }
    */
    {
      test: /\.(jpg|png)$/,
      loader: 'file-loader?name=[path][name].[hash].[ext]'
    },
  ]
},
};

module.exports =验证(配置);

EN

回答 2

Stack Overflow用户

发布于 2017-03-01 22:56:27

使用ProvidePlugin

代码语言:javascript
复制
...

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

...

然后在您的组件中,只需引用jQuery,就好像它是window对象上的全局变量一样。您可以对jquery-ui执行相同的操作。不要import它。jquery已经在全局作用域中,然后在模块中重新导入,并且在模块中的行为不正确,这一事实似乎表明存在冲突。

ProvidePlugin将导致依赖于jQuery的所有其他模块从jQuery的单个全局实例扩展。这应该可以解决您的问题。这应该可以解决jquery-ui问题,也可以解决您当前的问题。确保将其从您的html模板中删除。

有关更多详细信息,请参阅webpack documentation

票数 1
EN

Stack Overflow用户

发布于 2017-03-04 00:55:21

所以,最后的问题是虚拟键盘的版本。

我遵循了以下步骤:

  1. npm install --保存并安装
  2. npm运行构建
  3. npm运行监视

以匿名方式打开项目以确保没有缓存问题,并且它起作用了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42534817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档