Materialise不适用于React,Webpacka。 jQuery没有扩展

时间:2017-02-23 16:54:35

标签: javascript jquery reactjs webpack materialize

我在使用带有React的materialize-css时遇到问题。我用Webpack和Babel构建了它。问题是:

  

TypeError:$(...)。parallax不是函数
  TypeError:$(...)。material_chip不是函数
  TypeError:$(...)。modal不是函数
  等

这是我的React课程:

import React from 'react';
import 'materialize-css';
import 'materialize-css/dist/css/materialize.min.css';

class AwesomeComponent extends React.Component {

    constructor(props) {
        super(props);
    }

    onLike () {
        $('.modal').modal();
    }

    render() {
        return (
            <div>
                <div id="modal1" className="modal">
                    <div className="modal-content">
                        <h4>Modal Header</h4>
                        <p>A bunch of text</p>
                    </div>
                    <div className="modal-footer">
                        <a href="#!" className=" modal-action modal-close waves-effect waves-green btn-flat">Agree</a>
                    </div>
                </div>
                <a className="waves-effect waves-light btn" onClick={this.onLike}>
                    <i className="material-icons left">
                        cloud
                    </i>
                    Like cloud
                </a>
            </div>
        );
    }

}

export default AwesomeComponent;

这是我导入jQuery的webpack.config.js的一部分:

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

这是我的package.json:

的一部分
"dependencies": {
    "babel-core": "^6.18.2",
    "babel-loader": "^6.2.8",
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-react": "^6.16.0",
    "materialize-css": "^0.98.0",
    "react": "^15.4.1",
    "react-dom": "^15.4.1",
    "webpack": "^1.13.3",
    "jquery": "^2.1.4"
  },

请帮助我,我已经尝试了一切。

我已经调试过了。它将插件(例如.modal)添加到$ prototype中,但是当我想在类中使用它时,函数会以某种方式消失。

最后这是一个堆栈跟踪:

  

TypeError:$(...)。modal不是函数[了解更多] bundle.js:44497:14
    onLike
    与...相似     ReactErrorUtils.invokeGuardedCallback
    executeDispatch
    executeDispatchesInOrder     executeDispatchesAndRelease
    executeDispatchesAndReleaseTopLevel
    的forEach     forEachAccumulated
    EventPluginHub.processEventQueue
    runEventQueueInBatch
    ReactEventEmitterMixin.handleTopLevel
    handleTopLevelImpl
    TransactionImpl.perform
    ReactDefaultBatchingStrategy.batchedUpdates
    batchedUpdates
    ReactEventListener.dispatchEvent
    

1 个答案:

答案 0 :(得分:1)

对于有同样问题的其他人。

不要在webpack.config.js webpack.ProvidePlugin中使用,也不要导入$或jQuery。 Materialise将为您提供。

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

要使用以下代码,请使用jsx文件:

import 'materialize-css';

并且不要忘记正确的装载程序,这对Materialise来说很重要:

loaders : [
            {
                test: /\.(png|woff|woff2|eot|ttf|svg)$/,
                loader: 'url-loader?limit=100000'
            },
            {
                test: /\.scss$/,
                loaders: ['style-loader', 'css-loader?importLoaders=1', 'sass-loader'],
                exclude: ['node_modules']
            },
            {
                test: /\.css$/,
                loaders: ['style-loader', 'css-loader?importLoaders=1'],
                exclude: ['node_modules']
            },
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loaders: ['babel-loader', 'babel-loader?presets[]=react,presets[]=es2015'],
            }
        ]