7

我尝试在我的 React 组件中使用Pannellum NPM 包。

Pannellum 的 API 可以这样使用:

pannellum.viewer('panorama', {
    "type": "equirectangular",
    "panorama": "https://pannellum.org/images/alma.jpg"
});

我想到了以下代码:

import React, { Component } from 'react';
import './App.css';
import pannellum from 'pannellum';

class App extends Component {

  componentDidMount() {
    pannellum.viewer('panorama', {
      "type": "equirectangular",
      "panorama": "https://pannellum.org/images/alma.jpg"
    });
  }

  render() {
    return (
      <div id="panorama"></div>
    );    
  }
}

export default App;

会工作。然而事实并非如此。我明白了TypeError: __WEBPACK_IMPORTED_MODULE_2_pannellum___default.a.viewer is not a function

还尝试了不同的 import statements: import { pannellum } from 'pannellum';const pannellum = require('pannellum');但这些也不起作用。

有趣的是,Pannellum 的 API javascript 代码是捆绑在一起的,一旦我注释掉componentDidMount()并在页面加载后尝试通过 Chrome 开发工具控制台使用 API,它就可以工作。但是没有应用 CSS 样式。

我显然做错了什么。我看过360-react-pannellum包源代码,但我需要访问整个 API,而不仅仅是渲染,所以它不适合我的需要。

谢谢您的帮助。

4

2 回答 2

5

看pannellum的源码,它没有导出任何模块,而是把所有东西都放在了window对象上。

尝试导入代码并直接从窗口中使用它。

import React, { Component } from 'react';
import './App.css';
import 'pannellum';


class App extends Component {

  componentDidMount() {
    window.pannellum.viewer('panorama', {
      "type": "equirectangular",
      "panorama": "https://pannellum.org/images/alma.jpg"
    });
  }

  render() {
    return (
      <div id="panorama"></div>
    );    
  }
}

export default App;
于 2018-05-02T13:13:50.577 回答
1

尝试

componentDidMount() {
    window.pannellum.viewer('panorama', {
      "type": "equirectangular",
      "panorama": "https://pannellum.org/images/alma.jpg"
    });
  }
于 2018-05-02T13:09:03.070 回答