React和turn.js(turn不是函数)

时间:2019-04-05 11:31:10

标签: javascript jquery reactjs turn.js

我想运行带有react的turn.js。我在这里找到一个例子: https://codesandbox.io/s/005xlk45mn

我将代码修改为我的项目,但是出现以下错误: TypeError:jquery__WEBPACK_IMPORTED_MODULE_6 ___ default(...)(...)。turn不是函数

import React, { Component } from 'react';
import $ from "jquery";
import "turn.js";

const options = {
  width: 800,
  height: 600,
  autoCenter: true,
  display: "double",
  acceleration: true,
  elevation: 50,
  gradients: !$.isTouch,
  when: {
    turned: function(e, page) {
      console.log("Current view: ", $(this).turn("view"));
    }
  }
};

class xxx extends Component {

    constructor(props) {
        super(props);
    }

    componentDidMount() {
        $("#flipbook").turn(options);
    }

    render() {
        return (
                <div id="flipbook">
                    <div className="hard">Turn.js</div>
                    <div className="hard"></div>
                    <div> Page 1 </div>
                    <div> Page 2 </div>
                    <div className="hard"></div>
                    <div className="hard"></div>
                </div>
        );
    }
}

export default Condolences;

这也不起作用:

import * as $ from "jquery"
componentDidMount() {
        $(this.el).turn();
    }
render() {
        return (
                <div id="flipbook" ref={ el => this.el = el }>
                    <div className="hard">Turn.js</div>
                    <div className="hard"></div>
                    <div> Page 1 </div>
                    <div> Page 2 </div>
                    <div className="hard"></div>
                    <div className="hard"></div>
                </div>
        );
    }

2 个答案:

答案 0 :(得分:0)

似乎turn.js插件未附加到您的jQuery实例。这可能与您的Webpack设置有关。如您所述,该代码在codesandbox中工作正常。

为了将自身安装为jQuery插件,turn.js需要修改全局jQuery对象。尝试在Webpack配置中使用ProvidePlugin,以使jQuery暴露于turn.js。也许是这样的:

new webpack.ProvidePlugin({
    'window.jQuery': 'jquery',
    'window.$': 'jquery',
    $: 'jquery'
})

答案 1 :(得分:0)

我遇到了同样的问题...并且我使用了npm描述这样的较低版本的jQuery解决了问题

  

最新版本使用jQuery 1.12.0,因为jQuery 3.x打破了   翻页器。

使用JQuery版本1.12.0,并且有效

我什至使用React 16.10.x制作了demo